我有一个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"
]
}
}
})