2012-04-04 44 views
0

什么是批量查询mongo集合的最有效方式?例如,在SQL我会做这样的事情:批量查询的等价Mongodb成语

SELECT * FROM Foo WHERE id > {{floor}} limit 1000; 

我发现,我能做些什么作为概括here

而是跳过大警告让我觉得我不应该使用的。 (假设收集足够大,它很重要)。

我的集合除了自动生成的_id字段外没有任何索引。我不确定是否有一种方法可以使用这个和$ gt $ lt。

如果它的事项,我将使用卡斯巴司机,万一有内置的秘诀。

回答

2

是SQL查询的字面翻译蒙戈是

db.foo.find({"id": {"$gt": floor}}).limit(1000) 

这种查询可以由id字段上的索引(或_id上的默认索引(如果使用该列而不是一个名为id的索引)提供服务)。

limit()没有任何性能问题,但对于非常大的值,skip()可能表现不佳,因为服务器本质上需要遍历大量记录,才能开始将结果返回给您。

+0

对,我只有_id默认索引,所以我不知道min id是从哪开始的。尽管如此,我想如果我从0开始并限制1000,然后取最后一个_id并增加它,它可以工作......对吗? – 2012-04-04 21:53:45

+0

事实上,我可以做一些像db.foo.find({_id:{$ gt:new ObjectId(“000000000000000000000000”)}}).limit(1000)来让我开始。尼斯。 – 2012-04-04 22:06:00

+1

对于分页,建议使用该方法(记住最后一个,然后开始)。你可以做'db.foo.find({_ id:{$ gt:{last_object_id}})。sort({_ id:1})。limit(num_per_page)'。 Rembmer使用'sort()',否则你可能会得到奇怪的结果。 – dcrosta 2012-04-05 12:46:57