gpt4 book ai didi

mongodb - 在聚合中展平 MongoDB 嵌套数组

转载 作者:行者123 更新时间:2023-12-03 02:14:49 26 4
gpt4 key购买 nike

我有这样的文档:

{
"many" : {},
"other" : {},
"fields" : {},
"phases" : [
{
"type" : 10,
"states" : [
{
"type" : 10,
"time" : ISODate("2018-04-25T13:06:42.990+02:00")
},
{
"type" : 20,
"time" : ISODate("2018-04-25T13:26:12.122+02:00")
},
{
"type" : 30,
"time" : ISODate("2018-04-25T13:26:30.124+02:00")
}
]
},
{
"type" : 20,
"states" : [
{
"type" : 10,
"time" : ISODate("2018-04-25T13:27:58.201+02:00")
}
]
}
]
}

在聚合中,我试图展平状态,包括父级的类型,如下所示(所需的输出):

"states" : [ 
{
"phase": 10,
"type" : 10,
"time" : ISODate("2018-04-25T13:06:42.990+02:00")
},
{
"phase": 10,
"type" : 20,
"time" : ISODate("2018-04-25T13:26:12.122+02:00")
},
{
"phase": 10,
"type" : 30,
"time" : ISODate("2018-04-25T13:26:30.124+02:00")
},
{
"phase": 20,
"type" : 10,
"time" : ISODate("2018-04-25T13:27:58.201+02:00")
}
]

我已经通过此聚合完成了没有 phase 字段的附加 states 字段:

db.docs.aggregate([
{
$addFields: {
states: {
$reduce: {
input: "$phases",
initialValue: [],
in: { $concatArrays: ["$$value", "$$this.states"] }
}
}
}
}
])

应该保留“许多其他字段”,因此我认为分组不是一个选择。
MongoDB 版本是 3.4。

我尝试了很多方法都没有结果。我想知道这是否以及如何可能。

最佳答案

db.state.aggregate(

// Pipeline
[
// Stage 1
{
$unwind: {
path : "$phases",
includeArrayIndex : "arrayIndex", // optional
preserveNullAndEmptyArrays : false // optional
}
},

// Stage 2
{
$unwind: {
path : "$phases.states",
includeArrayIndex : "arrayIndex", // optional
preserveNullAndEmptyArrays : false // optional
}
},

// Stage 3
{
$project: {
"phases":"$phases.type",
"type":"$phases.states.type",
"time":"$phases.states.time",
}
},

// Stage 4
{
$group: {
"_id":"$_id",
states: { $push: { phases: "$phases", type: "$type",time: "$time" } }
}
},
]);

关于mongodb - 在聚合中展平 MongoDB 嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52164884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com