我想返回一个非常严格的文档,其中只包含一个特定的字段,而不是更少。
情况如下:
db.test.find()
{"_id":ObjectId("562693f46fdf6dd2a0c97ad6"),"shape":"circle","color":"red","age": "20"}
{"_id":ObjectId("562694046fdf6dd2a0c97ad7"),"shape":"circle","color":"blue","age": "42"}
{"_id":ObjectId("562694306fdf6dd2a0c97ad8"),"shape":"circle","color":"green"}
{"_id":ObjectId("562694306fdf6dd2a0c97ad8"),"shape":"blabla","color":"blabla"}
如何返回只包含字段的文档:形状和颜色,并省略所有其他字段上包含更多其他字段的文档。所以结果应该是这样的:
{"_id":ObjectId("562694306fdf6dd2a0c97ad8"),"shape":"circle","color":"green"}
{"_id":ObjectId("562694306fdf6dd2a0c97ad8"),"shape":"blabla","color":"blabla"}
编辑: 所有其他字段都是未知的,因此使用年龄:{$ exists:false}}是不可能的
答案 0 :(得分:5)
一种方法是检查两个字段是否存在并约束到具有3个字段(形状,颜色,_id)的结果:
db.test.find({
shape: { $exists: true },
color: { $exists: true },
$where: function() { return Object.keys(this).length === 3 }
})
此答案中还提到了使用$where
的替代方法:Mongodb Query based on number of fields in a record