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’,其他值允许不同)以及如何选择我是否需要第一个或最后一个元素.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。