加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:55:57 所属栏目:百科 来源:网络整理
导读:db.games.aggregate([ { $unwind : "$rounds"},{ $match: { "rounds.round_values.gameStage": "River","rounds.round_values.decision": "BetPlus" } },{ $project: {"FinalFundsChange":1,"GameID":1} }]) 结果输出是: { "_id" : ObjectId("57cbce66e281a
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"),"GameID" : "509975754" }

正如你所看到的那样,最后一个元素是重复的,因为unwind会创建它的两个元素,它应该是它.我如何(在保持查询的聚合结构的同时)保留副本的第一个元素或仅保留副本的最后一个元素?

我已经看到了这样做的方法似乎与$addToSet或$setUnion有关(任何细节如何工作也完全受到赞赏),但我不明白我如何选择我所依据的’子集’想要识别重复项(在我的情况下是’GameID’,其他值允许不同)以及如何选择我是否需要第一个或最后一个元素.

解决方法

您可以通过$group按_id进行分组,然后分别使用$last和$first运算符来保留最后一个或第一个值.

db.games.aggregate([ 
{ $unwind : "$rounds"},{ $group: { 
     _id: "$_id","FinalFundsChange": { $first: "$FinalFundsChange" },"GameID": { $last: "$GameID" }
   }
 }
])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读