列出属于不同文档的 MongoDB 聚合管道中的值
List values in MongoDB aggregation pipeline belonging to different documents
我从聚合管道中得到了这个结果:
{
"_id" : ISODate("2015-05-14T08:22:09.441Z"),
"values" : {
"v1_min" : 15.872267760931187,
"v1" : 15.909139078185774,
"v1_max" : 20.6420184124931776
}
},
{
"_id" : ISODate("2015-05-13T08:22:09.441Z"),
"values" : {
"v1_min" : 2.872263320931187,
"v1" : 7.909132898185774,
"v1_max" :44.6498764124931776
}
},
{...}
你认为有没有可能得到这样的结构
{
"_id" : [ISODate("2015-05-14T08:22:09.441Z"),ISODate("2015-05-13T08:22:09.441Z")]
"values" : {
"v1_min" : [15.872267760931187, 2.872263320931187],
"v1" : [15.909139078185774, 7.909132898185774]
"v1_max" : [2.6420184124931776, 44.6498764124931776]
}
}
要将其他一些阶段添加到我的聚合管道中吗?
如果是,你会怎么做?
我不想通过代码处理这个问题,因为我认为 MongoDB 聚合框架更快,应该比我做得更好。
是的,确实很有可能。以下聚合管道将实现所需的输出:
db.collection.aggregate([
{
"$group": {
"_id": null,
"ids": {
"$addToSet": "$_id"
},
"v1_min": {
"$push": "$values.v1_min"
},
"v1": {
"$push": "$values.v1"
},
"v1_max": {
"$push": "$values.v1_max"
}
}
},
{
"$project": {
"_id": "$ids",
"values": {
"v1_min": "$v1_min",
"v1": "$v1",
"v1_max": "$v1_max"
}
}
}
]);
-- 编辑 --
使用 $push
instead of $addToSet
因为后者只会在且仅当最终数组不包含元素本身时才添加元素。 (感谢@SylvainLeroux 的积极贡献)
我从聚合管道中得到了这个结果:
{
"_id" : ISODate("2015-05-14T08:22:09.441Z"),
"values" : {
"v1_min" : 15.872267760931187,
"v1" : 15.909139078185774,
"v1_max" : 20.6420184124931776
}
},
{
"_id" : ISODate("2015-05-13T08:22:09.441Z"),
"values" : {
"v1_min" : 2.872263320931187,
"v1" : 7.909132898185774,
"v1_max" :44.6498764124931776
}
},
{...}
你认为有没有可能得到这样的结构
{
"_id" : [ISODate("2015-05-14T08:22:09.441Z"),ISODate("2015-05-13T08:22:09.441Z")]
"values" : {
"v1_min" : [15.872267760931187, 2.872263320931187],
"v1" : [15.909139078185774, 7.909132898185774]
"v1_max" : [2.6420184124931776, 44.6498764124931776]
}
}
要将其他一些阶段添加到我的聚合管道中吗?
如果是,你会怎么做?
我不想通过代码处理这个问题,因为我认为 MongoDB 聚合框架更快,应该比我做得更好。
是的,确实很有可能。以下聚合管道将实现所需的输出:
db.collection.aggregate([
{
"$group": {
"_id": null,
"ids": {
"$addToSet": "$_id"
},
"v1_min": {
"$push": "$values.v1_min"
},
"v1": {
"$push": "$values.v1"
},
"v1_max": {
"$push": "$values.v1_max"
}
}
},
{
"$project": {
"_id": "$ids",
"values": {
"v1_min": "$v1_min",
"v1": "$v1",
"v1_max": "$v1_max"
}
}
}
]);
-- 编辑 --
使用 $push
instead of $addToSet
因为后者只会在且仅当最终数组不包含元素本身时才添加元素。 (感谢@SylvainLeroux 的积极贡献)