gpt4 book ai didi

mongodb - 查找与最小数组值匹配的所有文档

转载 作者:行者123 更新时间:2023-12-03 10:09:16 24 4
gpt4 key购买 nike

第一次我编写MongoDB查询并暂时管理到一定程度,但此刻仍然停滞不前。我调查了match属性,但不确定是否相关。
下面的查询将返回所有包含至少一个给定userrole文档。

roles := []string{"admin", "super_admin", "manager", "student"}

a.db.Collection("users").Find(ctx, bson.M{"roles": bson.M{"$in": roles}})

// db.users.find({roles: { $in: ["admin", "super_admin", "manager", "student"] }})
现在,我需要指定最小匹配条件。例如,用户文档必须匹配至少2个给定角色(无论是哪个角色)。我将需要使用类似 EQ, GTE, GT, LT, LTE运算符的东西。
更新
可以处理最小匹配数,这样可以忽略上面列出的所有运算符,这是可以的。

最佳答案

我不确定是否有其他简单的方法可以实现此目的,如果您使用的是MongoDB v4.4,可以使用聚合运算符查找,也可以使用aggregate(),我不知道go语法,但是我可以在MongoDB中做到这一点驾驶员查询

  • $reduce迭代角色数组循环,将初始值设置为0,检查当前角色是否在您输入的角色中,然后在初始值中添加一个,否则返回现有初始值
  • 使用$gte检查返回数大于2的表达式
  • 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
    ]
    }
    })
    Playground

    使用aggregate():
    Playground

    关于mongodb - 查找与最小数组值匹配的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65380914/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com