假设我有以下JSON结构,我想按性别分组,并希望在同一字段中返回多个文档值:
[
{
"id": 0,
"age": 40,
"name": "Tony Bond",
"gender": "male"
},
{
"id": 1,
"age": 30,
"name": "Nikki Douglas",
"gender": "female"
},
{
"id": 2,
"age": 23,
"name": "Kasey Cardenas",
"gender": "female"
},
{
"id": 3,
"age": 25,
"name": "Latasha Burt",
"gender": "female"
}
]
现在我知道我可以做这样的事情,但我需要将年龄和名字加入一个字段
.aggregate().group({ _id:'$gender', age: { $addToSet: "$age" }, name: { $addToSet: "$name"}})
答案 0 :(得分:1)
是的,你可以,只需要一个子文件作为参数:
db.collection.aggregate([
{ "$group": {
"_id": "$gender",
"person": { "$addToSet": { "name": "$name", "age": "$age" } }
}}
])
当然,如果你真的希望这里没有重复,那么$push
会做同样的事情:
db.collection.aggregate([
{ "$group": {
"_id": "$gender",
"person": { "$push": { "name": "$name", "age": "$age" } }
}}
])
答案 1 :(得分:0)
除了Neil为聚合查询提到的内容之外,您还必须考虑这样一个事实,即包含分组的单个记录的文档不能超过16 MB(在v2.5 +中),或者整个聚合结果不能超过16MB(在v2.4及以下)。
因此,如果您拥有庞大的数据集,您必须了解可能对用于聚合数据的模型施加的限制。