快点干什么?当值为 false 时省略该字段将导致文档稍小,这可能会导致整体速度略有提高。
但是省略该字段会使查询 false 变得更加困难,特别是如果您混合了省略字段和显式 false 值。
请注意此示例集合的不同查询返回的内容:
> db.test.find()
{ "_id" : ObjectId("500eeb7c42d87d5d861e1219") }
{ "_id" : ObjectId("500eeb8242d87d5d861e121a"), "b" : false }
{ "_id" : ObjectId("500eeb8642d87d5d861e121b"), "b" : true }
>
> db.test.find({b:true})
{ "_id" : ObjectId("500eeb8642d87d5d861e121b"), "b" : true }
>
> db.test.find({b:false})
{ "_id" : ObjectId("500eeb8242d87d5d861e121a"), "b" : false }
>
> db.test.find({b:{$exists:false}})
{ "_id" : ObjectId("500eeb7c42d87d5d861e1219") }
>
> db.test.find({$or:[{b:false},{b:{$exists:false}}]})
{ "_id" : ObjectId("500eeb7c42d87d5d861e1219") }
{ "_id" : ObjectId("500eeb8242d87d5d861e121a"), "b" : false }
>
请注意,如果混合了省略值和显式错误值,则必须编写的查询更加复杂,并且可能导致查询执行速度变慢。