【发布时间】:2013-08-21 00:11:25
【问题描述】:
我有一个包含 5 行的集合,但我需要选择一个:
for row in db.foo.find({},{"_id":1}).limit(1).sort("_id",-1):print row
结果:
{u'_id': 4}
但是,当计数光标时
flag=db.foo.find({},{"_id":1},limit=1).sort("_id",-1)
print flag.count()
结果=5
和flag=db.foo.find({},{"_id":1},limit=1).sort("_id",-1).count() 结果:5
有人知道为什么会这样吗?
MongoDB shell 版本:2.4.4
pymongo.version '2.5.1+'
【问题讨论】:
-
count()忽略了limit(<num>),这就是计数结果为 5 的原因。 -
但先找到后数,是否相等? @AbhishekKumar
-
因为
db.foo.find({},{"_id":1},limit=1).sort("_id",-1).count()和后面添加count()的查询是一样的。即使cur=db.foo.find({},{"_id":1},limit=1), cur.sort("_id",-1), cur.count()也会给出相同的结果。只有在您遍历游标时才会触发查询。因此,您可以在任何步骤中装饰您的光标(但必须在迭代之前)。希望它有所帮助。 -
但是在附加 count() 时,查询仅在那个时刻被触发,正如我从 mongostat 看到的那样。
-
谢谢!!! @AbhishekKumar