我们如何在MongoDB中编写一个查询来选择其名称变化的字段?

时间:2017-03-20 14:59:01

标签: python json mongodb

我有一个很大的JSON文件,我使用MongoPy来解析它。我想选择一些字段并将它们保存在新的JSON文件中。一些字段名称各不相同例如,在下面的JSON示例中,我想选择" Detials"为所有" id" s:

item = { "act": {
             "id1":[ {"Detials": {...}
                     "Values": {...}
                     },
                     {"Detials": {...}
                     "Values": {...}
                     },
                   ]
             "id2":[ {"Detials": {...}
                     "Values": {...}
                     },
                     {"Detials": {...}
                     "Values": {...}
                     },
                   ]
            }

      };

1 个答案:

答案 0 :(得分:1)

不,很难使用MongoDB查询具有不同名称的字段。

如果您稍微调整一下数据,转而行动"到一个子文档数组,然后你可以把" id1"每个子文档中的标记 - 这将使查询所有" Detials"更容易。例如,像这样:

{
    "act": [
        {
            "id" : 1,
            "data" : [ 
                {
                    "Detials": {...},
                    "Values": {...}
                },
                {
                    "Detials": {...},
                    "Values": {...}
                }
            ]
        },
        {
            "id" : 2,
            "data" : [ 
                {
                    "Detials": {...},
                    "Values": {...}
                },
                {
                    "Detials": {...},
                    "Values": {...}
                }
            ]
        }
    ]
}

如果您的数据属于此结构,则可以非常轻松地进行查询:

db.collection.aggregate([
    {$unwind: {"$act"}},
    {$group: {_id: "allTheDetails", "Detials" : {$push: "$act.data.Detials"}}}
])

这将返回每个" Detials"块。