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

基于Mongoose的MongoDB通配符搜索:未传字段自动忽略方案

实现方案

下面提供3种无需手动逐个判断字段存在性的实现方式:


方案1:纯JS原生实现(无第三方依赖)

通过Object.entries过滤掉值为undefined的属性,自动生成合法查询条件,后续新增查询字段也无需修改逻辑:

async fetchStats(getStatQuery: GetStatQueryDto): Promise<any> {
  const query = Object.fromEntries(
    Object.entries(getStatQuery).filter(([_, value]) => value !== undefined)
  );
  const stats = await this.statModel.find(query);
  return stats;
}

方案2:基于lodash工具函数实现

如果项目已经引入lodash,写法更简洁易读:

import { omitBy, isUndefined } from 'lodash';

async fetchStats(getStatQuery: GetStatQueryDto): Promise<any> {
  const query = omitBy(getStatQuery, isUndefined);
  const stats = await this.statModel.find(query);
  return stats;
}

方案3:Mongoose全局配置(最省事)

如果你使用的是Mongoose操作MongoDB,直接修改全局配置即可自动忽略所有查询中的undefined字段,原有业务代码完全不用改动:

  1. 在Mongoose初始化位置添加配置:
import mongoose from 'mongoose';
// Mongoose 6+ 版本默认strictQuery为true,改为false后会自动过滤查询条件中的undefined字段
mongoose.set('strictQuery', false);
  1. 原有代码保持不变即可生效:
async fetchStats(getStatQuery: GetStatQueryDto): Promise<any> {
  const stats = await this.statModel.find({
      title: getStatQuery.title,
      weight: getStatQuery.weight
  });
  return stats;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:42:03