You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按对象数组的多组匹配条件筛选MongoDB文档

MongoDB 多组成对条件的或查询实现

你需要查询满足「id和address成对匹配」的条目,即要么id=1且address=UK,要么id=2且address=US,可以直接用MongoDB的$or操作符实现:

  • $or接收一个条件数组,数组内每个元素代表一组需要满足的条件,不同元素之间是**或(OR)**关系
  • 单个元素内的多个字段条件默认是**且(AND)**关系,刚好适配每组两个字段同时匹配的需求

固定条件的查询写法

把每组匹配条件作为$or数组的子对象即可,MongoDB Shell写法如下:

// 把yourCollectionName替换成你实际的集合名
db.yourCollectionName.find({
  $or: [
    { id: 1, address: "UK" },
    { id: 2, address: "US" }
  ]
})

注意:如果你的id字段是MongoDB默认生成的_id字段,值需要用ObjectId()包装类型,从你给出的示例结构看id是自定义数字类型,直接传数字即可。

基于已有条件数组动态生成查询

如果你已经有题目里给出的结构化条件数组,不需要手动拆分重组,直接把数组传给$or参数即可:

// 你已有的条件数组
const conditionList = [{"id":1,"address":"UK"},{"id":2,"address":"US"}]

db.yourCollectionName.find({
  $or: conditionList
})

这种写法可以适配任意长度的同类成对匹配条件,不需要每次修改查询结构。

避坑说明

不要用$in分别匹配两个字段的范围,比如下面的写法是错误的:

// 错误写法,逻辑为(id在[1,2]内) AND (address在["UK","US"]内)
// 会额外匹配到id=1+address=US、id=2+address=UK这类不符合要求的条目
db.yourCollectionName.find({
  id: { $in: [1, 2] },
  address: { $in: ["UK", "US"] }
})

这种写法没有绑定id和address的对应关系,查询结果会包含跨组合的无效数据,不符合需求。

内容的提问来源于stack exchange,提问作者Sherjil Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:36:20