在查询嵌套对象中的字段和字段时设置条件

时间:2015-09-11 15:09:30

标签: arrays node.js mongoose

我有这样的文件:

{
    "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 ,它也会选择所有内容。 "正常"查询的工作方式与我想要的一样(没有子数组中的条件)。什么是在子阵列中设置标准的正确方法?

1 个答案:

答案 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函数中。