我有一个像这样的文件:

{
    "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函数。

07-24 13:03