2017-05-31 60 views
0

所以,我從MongoDB中檢索一些值。我現在說find方法返回一個cursor,它懶加載查詢結果。我希望將光標存儲爲散列,但我可以找到任何方法。當然,你可以遍歷遊標並自己填寫,但我對自動化方式感興趣。例如,在Python中,您可以這樣做:myList = list(col.find())將所有遊標項目作爲列表。MongoDB遊標在Perl中散列

在Perl中做類似的事情有可能嗎?

+0

你想要的鑰匙是什麼?你給的Python例子看起來像一個數組。有一種方法可以一次獲得所有文件。 – simbabque

+0

@simbabque作爲mongo文檔(http://search.cpan.org/dist/MongoDB/lib/MongoDB/Collection.pm)狀態,檢索到的文檔與散列相同。所以我想用鍵作爲檢索文檔中的鍵。 Whihc mehtod你在說什麼?它也可以是有用的 –

+0

https://metacpan.org/pod/MongoDB::QueryResult#all一次將所有搜索文檔作爲列表提供。我以前從未使用MongoDB,但聽起來'next'返回完整的文檔。這是你的哈希。 – simbabque

回答

1

當您致電find時,它會返回一個cursor object,它將迭代器方法委託給MongoDB::QueryResult。當你在那件事上做一個next時,它懶洋洋地返回一個文件。該文件已經是完整的數據集。這可能是一個哈希引用已經(或一個對象,我不知道)。

use Data::Dumper; 
while (my $object = $cursor->next) { 
    print Dumper $object; 
} 

如果你希望所有的人都在一次,就可以得到與all方法,然後你就可以放入數組,並在方便使用的清單。這不會按需加載。

my @objects = $cursor->all;