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

MongoDB使用$in查询时数组为空如何返回全部记录?

MongoDB $in数组为空时返回所有数据的实现方案

你可以通过以下两种方式实现需求,优先推荐第一种动态拼接方案,性能更高:

方案1:动态构造查询条件*(推荐)*

直接在业务代码中判断$in对应的数组长度,数组非空时才添加该过滤条件,空数组时直接使用空查询对象即可返回全量数据:

// 动态传入的$in查询数组
const queryList = ["ALGOL", "Lisp"]
const filter = {}
if (queryList.length > 0) {
  filter.contribs = { $in: queryList }
}
// 执行查询,数组为空时filter是空对象,返回所有记录
db.bios.find(filter)

该方案可以正常利用你为contribs字段创建的索引,查询性能最优,也支持和其他过滤条件灵活组合。

方案2:单查询语句固定写法

如果你不想在业务代码中做条件判断,也可以用$or和$expr组合写固定查询语句:

const queryList = []
db.bios.find({
  $or: [
    // 当数组长度为0时该条件恒成立,返回所有数据
    { $expr: { $eq: [ { $size: queryList }, 0 ] } },
    // 数组非空时走正常$in匹配逻辑
    { contribs: { $in: queryList } }
  ]
})

该方案的缺陷是$expr会降低索引的利用效率,数据量大时查询性能不如方案1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:09:03