首页 > 解决方案 > 如何从与数组比较的数组字段中查找所有文档

问题描述

我有一个 Person 模型,其字段是一个值数组,我的输入是另一个值数组。

我需要找到所有在两个数组之间具有匹配值的人:

const Person1 = {
  inner: { field: ["1", "2", "3"] }
}

const Person2 = {
  inner: { field: ["2", "3"] }
}

const Person3 = {
  inner: { field: ["1"] }
}

const Person4 = {
  inner: { field: ["3"] }
}

const searchAgainst = ["1", "2"]

因此,给定这 4 个具有这些值的人,当使用 搜索 Person 模型时searchAgainst,它应该返回Person1, Person2, Person3,因此即使只searchAgainst包含 的一个值,也应该返回它。

我试图这样做:

const foundPeople = await Person.find({ inner: { field: { $in: searchAgainst }}});

const foundPeople = await Person.find({ "inner.field": { $in: searchAgainst }});

但它没有用,它不会返回任何找到的人。

标签: mongodbmongoose

解决方案


您应该使用$elemMatch运算符。来自 MongoDB 文档

$elemMatch 运算符匹配包含数组字段的文档,其中至少一个元素匹配所有指定的查询条件。

因此,它似乎可以满足您的要求:

Person.find({
  "inner.field": {
    $elemMatch: {
      $in: [
        "1",
        "2"
      ]
    }
  }
})

推荐阅读