为什么db.collection.find({})。maxTimeMS(100)返回所有内容,但db.collection.find({},{$ maxTimeMS:100})只返回对象ID?

时间:2015-03-28 23:31:00

标签: mongodb

我使用的是MongoDB 2.6.8。根据{{​​3}},这两个查询的行为应该相同:

> db.collection.find({}).maxTimeMS(100)
> db.collection.find({}, {$maxTimeMS: 100})

第一个查询完全符合我的要求,但第二个查询限制只返回文档的对象ID。我尝试将$ maxTimeMS增加到100000000并且行为没有变化。

为什么我会为这两个命令得到不同的结果?

1 个答案:

答案 0 :(得分:1)

您找到了bug in the documentation

db.collection.find({}, {$maxTimeMS: 100})仅返回每个对象的_id的原因是因为mongoDB将查询的{$maxTimeMS: 100}部分解释为projection

因此,它认为您要查看所有文档,并希望查看字段_id和字段$maxTimeMS。当然,您的所有文档都没有$maxTimeMS字段,因此它们只显示_id

在没有快捷方式的情况下执行所需查询的正确方法是:

db.collection.find({ $query: {}, $maxTimeMS: 100 })