有人可以帮我用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",
}
}
任何帮助都将受到高度赞赏。 感谢
答案 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允许您匹配数组的元素。