如何从数组字段中找到与数组相比较的所有文档



我有一个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个人,当使用searchAgainst搜索Person模型时,它应该返回Person1, Person2, Person3,因此即使只包含searchAgainst的一个值,也应该返回。

我试过这样做:

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

但是它不工作,它不返回任何找到的人。

应使用$elemMatch操作符。从MongoDB文档:

$elemMatch操作符匹配包含至少一个元素符合所有指定查询条件的数组字段的文档。

所以它似乎满足了你想要的:

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

相关内容

  • 没有找到相关文章