MongoDB - 查找数组包含查询数组中任何项目的文档

发布于 2025-01-10 07:47:33 字数 408 浏览 0 评论 0原文

我有架构

person = {
 skill = [{
        type: String
    }]
 name = { type : String}
}

我有一个技能数组

skill = ['python', 'css'] 

我想要所有与技能数组中至少一项技能相匹配的人。

$all$in 仅检索与 skill 数组中的所有技能匹配的人员,但我希望匹配至少一项技能的人员skill 数组。

I have Schema

person = {
 skill = [{
        type: String
    }]
 name = { type : String}
}

I have a skill array

skill = ['python', 'css'] 

I want all the people that match at least one skill from the skill array.

$all and $in retrieve only people that match all the skills in the skill array but I want the people that match at least one skill from the skill array.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

已下线请稍等 2025-01-17 07:47:33

您可以使用 $setIntersection

  1. $setIntersection - 将输入技能数组与 skill 字段相交,并返回具有公共(相交)值的数组。
  2. $ne - 过滤文档,结果 (1) 不是空数组。
db.collection.find({
  $expr: {
    $ne: [
      {
        $setIntersection: [
          [
            "python",
            "css"
          ],
          "$skill"
        ]
      },
      []
    ]
  }
})

示例 Mongo Playground

You can use $setIntersection.

  1. $setIntersection - Intersect the input skill array with skill field and returns a array with common (intersect) value(s).
  2. $ne - Filter the document with result from (1) is not empty array.
db.collection.find({
  $expr: {
    $ne: [
      {
        $setIntersection: [
          [
            "python",
            "css"
          ],
          "$skill"
        ]
      },
      []
    ]
  }
})

Sample Mongo Playground

脱离于你 2025-01-17 07:47:33

您可以使用 "$in" 来达到您的目的。也许您之前尝试时遇到了其他问题。

db.collection.find({
  "skill": {
    "$in": [ "python", "css" ]
  }
})

mongoplayground.net 上尝试一下。

只是为了好玩,这里是另一个 mongoplayground.net 示例,该示例使用 < a href="https://github.com/feliixx/mgodatagen" rel="nofollow noreferrer" title="mgodatagen GitHub repo">mgodatagen 配置来生成 收藏。查询是相同的。

You can use "$in" for your purpose. Perhaps you had some other issue when you tried it before.

db.collection.find({
  "skill": {
    "$in": [ "python", "css" ]
  }
})

Try it on mongoplayground.net.

Just for fun, here's another mongoplayground.net example that uses a mgodatagen configuration to generate the collection. The query is the same.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文