mongodb - 如何将字段的值聚合到数组中?
问题描述
让我们取一个名为的集合values
,其中包含以下文档。
{ "_id" : 1, "name" : "value1", "x" : 1, "y" : 2 }
{ "_id" : 2, "name" : "value1", "x" : 2, "y" : 2 }
{ "_id" : 3, "name" : "value1", "z" : 10 }
{ "_id" : 4, "name" : "value1", "z" : 20 }
{ "_id" : 5, "name" : "value2", "x" : 8, "y" : 3 }
{ "_id" : 6, "name" : "value2", "x" : 8, "y" : 3 }
{ "_id" : 7, "name" : "value2", "z" : 15 }
在这里,如果我基于name
, take 进行查询value1
,那么我应该得到以下单个文档。
{ "name" : "value1", "x" : [ 1, 2 ], "y" : [ 2, 2 ], "z" : [ 10, 20 ] }
我认为这与聚合有关。但我不知道该怎么做。有没有办法实现这种行为?
解决方案
您可以使用以下聚合
db.collection.aggregate([
{
$match: {
name: "value1"
}
},
{
$group: {
_id: "$name",
x: {
"$push": "$x"
},
y: {
"$push": "$y"
},
z: {
"$push": "$z"
}
}
}
])
推荐阅读
- java - 如果更改了 url,那么 Glide 是否有任何选项,然后缓存将被清除,否则会加载旧图像?
- swift - 符合 Swift 中关联类型协议的异构数组
- coding-style - oop 中更好的编码风格是什么:一种方法有一个参数 VS 两种方法没有参数?
- python - 如何在熊猫数据框中同时使用部分列名,dcast和重值进行分组
- prestashop - 在 Prestashop 1.7.6 购物车上显示产品可用性
- excel - 如何将时间写入 IF 语句以便识别它
- postgresql - PostgreSQL 查询返回 ERROR: could not identify an equal operator for type json
- node.js - NodeJs:无法在 AWS Lambda 环境中生成 Exiftool
- php - Codeigniter 动态 url 路由映射到变量
- xaml - 文本未显示在带圆角的文本框中