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

Node.js/Typescript/Mongoose筛选MongoDB中disable字段为defined/undefined的方法

软删除字段筛选实现方案

需求背景

基于Node.js、TypeScript、Mongoose开发Web服务时,MongoDB中存储的所有业务对象都包含Date类型的disable字段:该字段默认值为undefined,执行软删除操作时会被赋值为删除时刻的new Date()。由于不做物理删除,需要分别返回两类列表:

  • disable为undefined的正常对象列表
  • disable不为undefined的已删除对象列表

报错原因

直接在查询逻辑中使用!undefined作为筛选条件会触发报错,因为MongoDB查询语法不支持直接使用原生JS的非运算作为字段筛选规则,Mongoose会将该语法解析为非法的查询结构,导致数据库请求失败。

最终解决方案

使用MongoDB内置的$ne(不等于)查询运算符即可实现需求,TypeScript+Mongoose示例代码如下:

import BusinessModel from './models/business.model'

// 查询正常未删除的对象列表
const getNormalList = async () => {
  return await BusinessModel.find({
    disable: undefined // 等价于{ disable: { $eq: undefined } }
  }).exec()
}

// 查询已软删除的对象列表
const getDeletedList = async () => {
  return await BusinessModel.find({
    disable: { $ne: undefined }
  }).exec()
}

语法说明

  • $ne运算符会匹配所有字段值不等于指定值的记录,同时会排除字段不存在的场景,完全匹配当前软删除字段的设计逻辑
  • 该查询语法同时兼容Mongoose和原生MongoDB驱动的调用方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:09:02