我有这样的文件:
{
"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-array中使用" isstammkost":true 选择数据。
我的查询是:
Move.findOne({accepted : true, 'inventar.isstammkost' : true},
'OutDate InDate inventar.name', function(err, res)
它不起作用 - >即使使用 inventar.isstammkost:false ,它也会选择所有内容。 "正常"查询的工作方式与我想要的一样(没有子数组中的条件)。什么是在子阵列中设置标准的正确方法?
答案 0 :(得分:0)
当然它将返回" isstammkost":false部分,因为它是" isstammkost":true的同一文档的一部分。它们都是数组中的对象" inventar",是单个文档中的顶级字段。如果没有某种projection,整个文档将始终返回到mongodb查询,因此nodejs会将它们传递给您。
我对nodejs的速度并不是很高,但如果这是mongo shell,它将如下所示:
> db.MyDB.findOne({{accepted : true, "inventar.isstammkost" : true}, {"inventar.isstammkost.$": 1});
您需要了解如何将该额外参数添加到nodejs函数中。