gpt4 book ai didi

mongodb - 使用聚合查询删除 mongodb 中的重复项

转载 作者:IT老高 更新时间:2023-10-28 12:29:32 26 4
gpt4 key购买 nike

db.games.aggregate([ 
{ $unwind : "$rounds"},
{ $match: {
"rounds.round_values.gameStage": "River",
"rounds.round_values.decision": "BetPlus" }
},
{ $project: {"FinalFundsChange":1, "GameID":1}
}])

结果输出是:

{ "_id" : ObjectId("57cbce66e281af12e4d0731f"), "GameID" : "229327202", "FinalFundsChange" : 0.8199999999999998 }
{ "_id" : ObjectId("57cbe2fce281af0f34020901"), "FinalFundsChange" : -0.1599999999999997, "GameID" : "755030199" }
{ "_id" : ObjectId("57cbea3ae281af0f340209bc"), "FinalFundsChange" : 0.10000000000000009, "GameID" : "231534683" }
{ "_id" : ObjectId("57cbee43e281af0f34020a25"), "FinalFundsChange" : 1.7000000000000002, "GameID" : "509975754" }
{ "_id" : ObjectId("57cbee43e281af0f34020a25"), "FinalFundsChange" : 1.7000000000000002, "GameID" : "509975754" }

你可以看到最后一个元素是重复的,那是因为展开创建了它的两个元素,它应该这样做。我怎样才能(同时保持查询的聚合结构)保留重复的第一个元素或只保留重复的最后一个元素?

我已经看到执行此操作的方法似乎与 $addToSet 或 $setUnion 相关(任何具体如何工作的细节也值得赞赏),但我不明白如何选择“子集”我想通过它来识别重复项(在我的情况下是“GameID”,其他值可以不同)以及如何选择我想要第一个元素还是最后一个元素。

最佳答案

您可以通过 $group_id 分组,然后分别使用 $last$first 运算符保留最后一个或第一个值。

db.games.aggregate([ 
{ $unwind : "$rounds"},
{ $match: {
"rounds.round_values.gameStage": "River",
"rounds.round_values.decision": "BetPlus" }
},
{ $group: {
_id: "$_id",
"FinalFundsChange": { $first: "$FinalFundsChange" },
"GameID": { $last: "$GameID" }
}
}
])

关于mongodb - 使用聚合查询删除 mongodb 中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39315892/

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