为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喵时光机 2019-03-01 10:45:17
如题我想要得到 [[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]] },
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

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

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"
        }
    }
}]);
查看完整回答
反对 回复 2019-03-01
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

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

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

查询返回结果

{ "_id" : NumberLong(2), "test" : [ [ "a", "b" ], [ "a", "b" ] ] }
查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 556 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号