Mongodb 将两个字段合并到一个数组中

Mongodb 将两个字段合并到一个数组中,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,来自具有两个字段的文档,例如“player_1”和“player_2”。我希望通过将它们合并为一个未区分的字段来聚合它们。下一步是计算值出现的次数,无论是从一个字段还是从另一个字段。例如: { _id : ObjectId("52f0795a58c5061aa34d436a"), "game_id": 765 "player_1" : 1, "player_2" : 2 } 将结果用于: { "game_id": 765, "player" : 1 }, {

来自具有两个字段的文档,例如“player_1”和“player_2”。我希望通过将它们合并为一个未区分的字段来聚合它们。下一步是计算值出现的次数,无论是从一个字段还是从另一个字段。例如:

{
   _id : ObjectId("52f0795a58c5061aa34d436a"),
   "game_id": 765
   "player_1" : 1,
   "player_2" : 2
}
将结果用于:

{
   "game_id": 765,
   "player" : 1
},
{
   "game_id": 765,
   "player" : 2
}
因为这些字段不是数组,所以我还没有找到这样聚合它们的解决方案

例如,下面的聚合命令不理解我正在尝试获取文档字段

[
{ $project: { 
    game_id: true, 
    player: { $setUnion: [['$player_1'], ['$player_2']] } }
},
{ $unwind: '$player' }
]
结果:

{
   "game_id": 765,
   "player": "$player_1" 
},
{
   "game_id": 765,
   "player" : "$player_2"
}
您需要将运算符与运算符一起使用,以返回一个“玩家”数组

db.collection.aggregate([
{$项目:{
“游戏id”:1,
“玩家”:{
“$map”:{
输入:{$literal:[“p1”,“p2”]},
如:“p”,
在:{
$cond:[
{$eq:[“$$p”,“p1”]},
“$player_1”,
“$player_2”
]
}
}
}
}}, 
{$REWIND:“$player”}
])
这将产生:

{
“_id”:ObjectId(“52f0795a58c5061aa34d436a”),
“游戏id”:765,
“玩家”:1
}
{
“_id”:ObjectId(“52f0795a58c5061aa34d436a”),
“游戏id”:765,
“玩家”:2
}

这里的p1和p2是什么@styvane@Karthikeyan它们是任意命名的字段,稍后将在条件
{$eq:[“$$p”,“p1”]}