查询数组项

时间:2017-08-09 13:09:17

标签: mongodb

有人可以帮我用mongo查询从JSON下面构建和提取数据吗?

JSON:

{
"app": [{
    "appFamily": "default",
    "attributes": [{
            "name": "field1",
            "value": "field1value"
        },
        {
            "name": "field2",
            "value": "field2value"
        },
        {
            "name": "field3",
            "value": "field3value"
        }
    ],
    "nameApp": "AppName",
},
       {
    "appFamily": "default2",
    "attributes": [{
            "name": "field1",
            "value": "field1value"
        },
        {
            "name": "field2",
            "value": "field2value"
        },
        {
            "name": "field3",
            "value": "field3value"
        }
    ],
    "nameApp": "AppName2",
}]

}

我需要获取字段和值,其中name =" field2"和" field3"以及" nameApp"值。

预期产出:

{
{
    {
        "name": "field2",
        "value": "field2value"
    }, {
        "name": "field3",
        "value": "field3value"
    },
    "name": "AppName",
}, {

    {
        "name": "field2",
        "value": "field2value"
    },
    {
        "name": "field3",
        "value": "field3value"
    },
    "name": "AppName2",

}

}

任何帮助都将受到高度赞赏。 感谢

1 个答案:

答案 0 :(得分:0)

Tarun,假设“app”是您的收藏品,您可以使用查找并使用 $或 $ elemMatch {{进行此调用3}},像这样:

db.app.find(
    { $or: [
        { attributes: { $elemMatch: { name: 'field2' } }},
        { attributes: { $elemMatch: { name: 'field3' } }}
    ] }
);

可能很难(或不可能)返回您列出的预期输出,我不确定。你是否可以在数组中返回属性

如果是这样,您可以通过在查询logical operators中包含字段名称和1来明确地执行此操作:

db.app.find(
    { $or: [
        { attributes: { $elemMatch: { name: 'field2' } }},
        { attributes: { $elemMatch: { name: 'field3' } }}
      ]
    }, { attributes: 1, nameApp: 1}
);

如果“app”是文档,则需要将上面的查询与另一个 $ elemMatch 运算符嵌套 - $ elemMatch允许您匹配数组的元素。