2 回答
TA贡献1783条经验 获得超4个赞
我不确定有没有其他简单的方法来实现这一点,如果你使用的是MongoDB v4.4,你可以在find中使用聚合运算符,或者你可以使用,我不知道语法,但我可以在MongoDB驱动程序查询中做到这一点,aggregate()
go
$reduce
迭代角色数组的循环,将初始值设置为 0,检查条件当前角色是否在您输入的角色中,然后在初始值中添加一个,否则返回现有的初始值,检查返回编号大于 2 的表达式
$gte
db.users.find({
$expr: {
$gte: [
{
$reduce: {
input: "$roles",
initialValue: 0,
in: {
$cond: [
{ $in: [$$this", ["admin","super_admin","manager","student"]] },
{ $add: ["$$value", 1] },
"$$value"
]
}
}
},
2 // input your number
]
}
})
使用 aggregate(): Playground
TA贡献1836条经验 获得超5个赞
跟进接受的答案,这是Go版本。只适合那些可能需要一些参考的人。
filter := bson.M{
"$expr": bson.M{
"$gte": []interface{}{
bson.M{
"$reduce": bson.M{
"input": "$roles",
"initialValue": 0,
"in": bson.M{
"$cond": []interface{}{
bson.M{
"$in": []interface{}{
"$$this",
roles, // This is your []string slice
},
},
bson.M{
"$add": []interface{}{
"$$value",
1,
},
},
"$$value",
},
},
},
},
minMatch, // This is the limit
},
},
}
- 2 回答
- 0 关注
- 113 浏览
添加回答
举报