mongodb - 如何从与数组比较的数组字段中查找所有文档
问题描述
我有一个 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 }});
但它没有用,它不会返回任何找到的人。
解决方案
您应该使用$elemMatch
运算符。来自 MongoDB 文档:
$elemMatch 运算符匹配包含数组字段的文档,其中至少一个元素匹配所有指定的查询条件。
因此,它似乎可以满足您的要求:
Person.find({
"inner.field": {
$elemMatch: {
$in: [
"1",
"2"
]
}
}
})
推荐阅读
- python - python web 抓取但被阻止
- c - 基准 C 结构比较:XOR 与 ==
- android - 使用开关启用和禁用推送通知
- kubernetes - Istio 本地优先级负载均衡不起作用
- r - 如何使用ggplot手动设置线色和线型以因子变量
- python - 无法获取本地颁发者证书并且在 python 中超出了最大重试次数
- javascript - 重新组合元素的过滤器不起作用
- ruby-on-rails - Rails - 了解查询
- java - 类路径资源 [myfile.xml] 无法解析为 Docker 中的绝对文件路径
- c++ - 在 wxBoxSizer 的整个方向上分布和居中项目而不拉伸