我正在创建某种彩票游戏,用户可以提交数字 1-9 之间的 3 位数字(例如“1、4、5、8”)。然后游戏以使用 Math.random 的获胜 3 位数数字结束。
我需要做的是找到每个用户的匹配数,并确定其中谁获得了 1 个匹配、2 个匹配和 3 个匹配。
示例:
如何使用 MongoDB 聚合执行此操作?
这是 mongo Playground 的链接,其中包含该集合:https://mongoplayground.net/p/02F-vER_yEV
也许您正在寻找这样的东西:
db.collection.aggregate([
{
$match: {
"entries.lotteryNumber": {
$in: [
1,
2,
3
]
}
}
},
{
"$addFields": {
"entries": {
"$map": {
"input": "$entries",
"as": "e",
"in": {
userId: "$$e.userId",
"dateSubmitted": "$$e.dateSubmitted",
lotteryMatchingCount: {
$size: {
"$setDifference": [
"$$e.lotteryNumber",
{
"$setDifference": [
"$$e.lotteryNumber",
[
1,
2,
3
]
]
}
]
}
}
}
}
}
}
}
])
解释:
最好将数字作为数组,以便在 mongoDB 中更容易,不知道为什么在字符串中添加示例...
仅匹配至少包含一个匹配彩票号码的文档。 (减少文件量)
映射所有用户并在名为“lotteryMatchingCount”的新变量中计算匹配彩票号码的计数