我有一个像这样的文件:
{
"InDate": "11.09.2015",
"Kst2Kst": true,
"OutDate": "11.09.2015",
"__v": 0,
"_id": ObjectId('55f2df2d7e12a9f1f52837e6'),
"accepted": true,
"inventar": [
{
"accepted": "1",
"name": "AAAA",
"isstammkost": true,
"stammkost": "IWXI"
},
{
"accepted": "1",
"name": "BBBB",
"isstammkost": false,
"stammkost": "null"
}
]
}
我想在inventar数组中选择带有“ isstammkost”的数据:true。
我的查询是:
Move.findOne({accepted : true, 'inventar.isstammkost' : true},
'OutDate InDate inventar.name', function(err, res)
它不起作用->即使使用inventar.isstammkost,它也会全选:false。
“正常”查询的工作方式与我想要的一样(子数组中没有条件)。在子数组中设置条件的正确方法是什么?
最佳答案
当然,它将返回“ isstammkost”:虚假部分,因为它与“ isstammkost”:true是同一文档的一部分。它们都是“ inventar”数组中的对象,“ inventar”数组是单个文档中的顶级字段。如果没有某种projection,整个文档将始终返回到mongodb查询,因此nodejs会将它们传递给您。
我对nodejs的了解不是非常快,但是如果这是mongo shell,它将看起来像这样:
> db.MyDB.findOne({{accepted : true, "inventar.isstammkost" : true}, {"inventar.isstammkost.$": 1});
您将需要了解如何将额外的参数添加到nodejs函数。