mongodb找到一份非常严格的文件

时间:2015-10-20 19:45:27

标签: mongodb find

我想返回一个非常严格的文档,其中只包含一个特定的字段,而不是更少。

情况如下: 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}}是不可能的

1 个答案:

答案 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