如何在组内推送多个列的值
How to push multiple columns' value within group
看来我的查询不会像我期望的那样
我想按 name
分组并将位置 1 和位置 2 映射到名为 locations
的数组中
数据
{name: "Jack", localtion1: "Taiwan", localtion2: "France"},
{name: "Jack", localtion1: "Japan", localtion2: "Taiwan"},
{name: "Mary", localtion1: "China", localtion2: "Taiwan"}
预期结果
{
name: "Jack",
localtions: ["Taiwan", "France", "Japan"]
},
{name: "Mary", localtions: ["China", "Taiwan"]}
查询
db.collection.aggregate([
{
$group: {
_id: "$name",
"localtions":{
$addToSet: "$localtion1"
},
"localtions":{
$addToSet: "$localtion2"
}
count: { $sum: 1 }
}
},
{
$project: {
name: "$_id",
localtions: "$localtions",
_id: 0
}
},
])
您可以使用$setUnion
operator. For others set operators read this。
db.collection.aggregate([
{
"$group": {
"_id": "$name",
"localtion1": { "$addToSet": "$localtion1" },
"localtion2": { "$addToSet": "$localtion2" }
}
},
{
"$project": {
"name": "$_id",
"localtions": { "$setUnion": [ "$localtion1", "$localtion2" ] },
"_id": 0
}
}
])
输出
{ "name" : "Mary", "localtions" : [ "Taiwan", "China" ] }
{ "name" : "Jack", "localtions" : [ "France", "Japan", "Taiwan" ] }
您还可以在 $project
管道中使用 $setUnion
运算符,如下所示:
db.collection.aggregate([
{
"$group": {
"_id": "$name",
"location1": {
"$addToSet": "$localtion1"
},
"location2": {
"$addToSet": "$localtion2"
}
}
},
{
"$project": {
"name": "$_id",
"locations": {
"$setUnion": [ "$location1", "$location2" ]
},
"_id": 0
}
}
])
会给你结果:
/* 0 */
{
"result" : [
{
"name" : "Mary",
"locations" : [
"China",
"Taiwan"
]
},
{
"name" : "Jack",
"locations" : [
"Japan",
"Taiwan",
"France"
]
}
],
"ok" : 1
}
看来我的查询不会像我期望的那样
我想按 name
分组并将位置 1 和位置 2 映射到名为 locations
数据
{name: "Jack", localtion1: "Taiwan", localtion2: "France"},
{name: "Jack", localtion1: "Japan", localtion2: "Taiwan"},
{name: "Mary", localtion1: "China", localtion2: "Taiwan"}
预期结果
{
name: "Jack",
localtions: ["Taiwan", "France", "Japan"]
},
{name: "Mary", localtions: ["China", "Taiwan"]}
查询
db.collection.aggregate([
{
$group: {
_id: "$name",
"localtions":{
$addToSet: "$localtion1"
},
"localtions":{
$addToSet: "$localtion2"
}
count: { $sum: 1 }
}
},
{
$project: {
name: "$_id",
localtions: "$localtions",
_id: 0
}
},
])
您可以使用$setUnion
operator. For others set operators read this。
db.collection.aggregate([
{
"$group": {
"_id": "$name",
"localtion1": { "$addToSet": "$localtion1" },
"localtion2": { "$addToSet": "$localtion2" }
}
},
{
"$project": {
"name": "$_id",
"localtions": { "$setUnion": [ "$localtion1", "$localtion2" ] },
"_id": 0
}
}
])
输出
{ "name" : "Mary", "localtions" : [ "Taiwan", "China" ] }
{ "name" : "Jack", "localtions" : [ "France", "Japan", "Taiwan" ] }
您还可以在 $project
管道中使用 $setUnion
运算符,如下所示:
db.collection.aggregate([
{
"$group": {
"_id": "$name",
"location1": {
"$addToSet": "$localtion1"
},
"location2": {
"$addToSet": "$localtion2"
}
}
},
{
"$project": {
"name": "$_id",
"locations": {
"$setUnion": [ "$location1", "$location2" ]
},
"_id": 0
}
}
])
会给你结果:
/* 0 */
{
"result" : [
{
"name" : "Mary",
"locations" : [
"China",
"Taiwan"
]
},
{
"name" : "Jack",
"locations" : [
"Japan",
"Taiwan",
"France"
]
}
],
"ok" : 1
}