[英]Merging nested object fields into a single nested array field in MongoDB Aggregation
作为我的聚合管道的一部分,我有以下场景。 这是对每个文档中先前展开的字段进行分组的结果(因此在这种情况下,有两个文档具有相同的 _id 但具有不同的 UniqueFieldName 值)
TopLevelField: [
{
UniqueFieldName: "Values go here!"
},
{
UniqueFieldName: "More values go here too!"
}
]
我想要做的就是将嵌套的 object 字段合并到一个字段中,并将所有值作为数组推送到该字段中,就像这样。
TopLevelField: {
UniqueFieldName: [
"Values go here!",
"More values go here too!",
],
}
我的想法是,我可以将每个字段下具有多个值的多个字段组合在一起,以便于迭代。
TopLevelField: {
UniqueFieldName: [
"Values go here!",
"More values go here too!",
],
SecondFieldName: [
"This is text",
],
AnotherOne: [
"TEXT",
"Here too!",
"More values",
],
}
我遇到的问题是尝试在 $group 阶段使用点符号会引发错误。 mongo 好像不喜欢这样用嵌套对象分组?
简单的解决方案是将 TopLevelField 更改为像这样的嵌套字段的一些串联,
TopLevelField-UniqueFieldName: [
"Values go here!",
"More values go here too!",
],
TopLevelField-SecondFieldName: [
"This is text",
],
TopLevelField-AnotherOne: [
"TEXT",
"Here too!",
"More values",
],
但这对我的用例来说不是最优的。 是否有解决方案,或者我是否需要重新考虑整个管道?
你可以试试这个:
db.collection.aggregate([
{ $unwind: '$TopLevelField' },
{
$group: {
_id: '', 'UniqueFieldName': { $push: '$TopLevelField.UniqueFieldName' },
'UniqueFieldName2': { $push: '$TopLevelField.UniqueFieldName2' },
'UniqueFieldName3': { $push: '$TopLevelField.UniqueFieldName3' },
'UniqueFieldName4': { $push: '$TopLevelField.UniqueFieldName4' }
}
}, { $project: { _id: 0 } }, { $project: { 'TopLevelField': '$$ROOT' } }])
测试: MongoDB-游乐场
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.