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 關注
- 144 瀏覽
添加回答
舉報