Clo*_*ren 4 mongodb aggregation-framework
我有这样的文件:
{
"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")
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
在聚合中,我试图将states包含父项的内容展平type(所需的输出):
"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")
}
]
Run Code Online (Sandbox Code Playgroud)
我已经使用此聚合完成了states没有phase字段的附加字段:
db.docs.aggregate([
{
$addFields: {
states: {
$reduce: {
input: "$phases",
initialValue: [],
in: { $concatArrays: ["$$value", "$$this.states"] }
}
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
应该保留“许多其他字段”,所以我相信分组不是一种选择。
MongoDB 版本是 3.4。
我尝试了很多事情都没有结果。我想知道这是否以及如何可能。
小智 6
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" } }
}
},
]);
Run Code Online (Sandbox Code Playgroud)
您可以使用下面的聚合。用于$map格式化状态数组以包含相位场。
db.docs.aggregate([
{"$addFields":{
"states":{
"$reduce":{
"input":"$phases",
"initialValue":[],
"in":{
"$concatArrays":[
"$$value",
{"$map":{
"input":"$$this.states",
"as":"state",
"in":{"phase":"$$this.type","type":"$$state.type","time":"$$state.time"}
}}
]
}
}
}
}}
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4575 次 |
| 最近记录: |