mongodb中能否$push一个数组元素

发布于 2022-09-05 06:30:14 字数 1137 浏览 21 评论 0

如题
我想要得到 [[value1,value2],[value3,value4],[value5,value6]],这样的数据,但是 $push 只能这样

{
    $push: {
        key1:value1,
        key2:value2
    }
}

最后得到 [{key1:value1,key2:value2},{key1:value3,key2:value4},{key1:value5,key2:value6}]

请问在不重新遍历的情况下怎样才能得到想要的数据呢?

补充:

原数据格式为

{
    key1:value1,
    key2:value2,
    key3:value3,
    key4:value4
}

比如我想要以key1,key4分组,算key2,key3的平均值

{
   $group: {
        _id:{
            key1:$key1,
            key4:$key4
        },
        key2_avg:{
            $avg:$key2
        },
        key3_avg:{
            $avg:$key3
        }
  }
},
{
   $group: {
        _id:$_id.key4,
        key2_array:{
            $push:{
                key2:$key2_avg
                }
        },
        key3_array:{
            $push:{
                key3:$key3_avg
                }
        }
  }
}

最后我想输出这样的格式

{
    _id:value4,
    key2_array:[[key1,key2_avg],[key1,key2_avg]],
    key3_array:[[key1,key3_avg],[key1,key3_avg]]
},

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

葬花如无物 2022-09-12 06:30:14

你要的形式看起来有点奇怪,我也没理解背后的意义是得到什么,但是单就形式上讲是可以做到的,看这样是不是你要的结果:

db.test.aggregate([{
    $group: {
        _id: {
            key1: "$key1",
            key4: "$key4"
        },
        key2_avg: {
            $avg: "$key2"
        },
        key3_avg: {
            $avg: "$key3"
        }
    }
}, {
    $project: {
        key2: ["$_id.key1", "$key2_avg"],
        key3: ["$_id.key1", "$key3_avg"]
    }
}, {
    $group: {
        _id: "$_id.key4",
        key2_array: {
            $push: "$key2"
        },
        key3_array: {
            $push: "$key3"
        }
    }
}]);
白日梦 2022-09-12 06:30:14

push只添加一个值
请参考如下讨论:
http://forum.foxera.com/mongo...

抱猫软卧 2022-09-12 06:30:14

题主想要一个多维数组, 就像如下操作就行了. 在array中添加一个array.

db.user.update({}, {$push: {test: ['a', 'b']} })

查询返回结果

{ "_id" : NumberLong(2), "test" : [ [ "a", "b" ], [ "a", "b" ] ] }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文