gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:35:35 33 4
gpt4 key购买 nike

来自具有两个字段的文档,例如“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"
}

最佳答案

您需要使用 $map运算符 $literal运算符返回一个“玩家”数组。

db.collection.aggregate([
{ $project: {
"game_id": 1,
"player": {
"$map": {
input: { $literal: [ "p1", "p2" ] },
as: "p",
in: {
$cond: [
{ $eq: [ "$$p", "p1" ] },
"$player_1",
"$player_2"
]
}
}
}
}},
{ $unwind: "$player" }
])

产生:

{
"_id" : ObjectId("52f0795a58c5061aa34d436a"),
"game_id" : 765,
"player" : 1
}
{
"_id" : ObjectId("52f0795a58c5061aa34d436a"),
"game_id" : 765,
"player" : 2
}

关于mongodb - 将两个字段合并到一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33674145/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com