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

mongodb find a very strict document

我想return一个非常严格的文档,只包含一个特定的字段不多也不少。

情况是这样的: 文档 return 编辑者 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"}

我如何 return 只有字段的文档:形状和颜色,而忽略所有其他包含更多其他字段的文档。所以结果应该是这样的:

{"_id":ObjectId("562694306fdf6dd2a0c97ad8"),"shape":"circle","color":"green"}
{"_id":ObjectId("562694306fdf6dd2a0c97ad8"),"shape":"blabla","color":"blabla"}

编辑: 所有其他字段都是未知的,所以使用 age:{$exists:false}} 是不可能的

一种方法是检查这两个字段是否存在并限制为恰好具有 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