Mongoose使用$exists:true查询返回无目标字段文档问题求助
问题分析与解决方案
核心问题:字段名拼写错误
你所有查询里用的字段是definiton,但Schema和目标文档中实际对应的字段是definition(少了一个字母i)。MongoDB会直接忽略不存在的查询字段,导致你的筛选条件完全无效,自然会返回所有文档,包括不含definition的条目。
修正后的代码
将查询字段名修正为正确的definition即可:
for await (const expression of Expression.find({'definition': { $exists: true }})) { console.log(Utils.stringize(expression)) }
其他写法的修正版本:
- 使用
$ne: null的正确写法:Expression.find({'definition': { $ne: null }}) - 使用
where链式调用的正确写法:Expression.find().where('definition').exists(true)
验证建议
可以直接在MongoDB Shell中执行以下命令,快速确认筛选逻辑是否正常:
db.expressions.find({ definition: { $exists: true } })
如果返回结果均包含definition字段,说明字段名修正后逻辑生效。
内容的提问来源于stack exchange,提问作者user10165777
相关产品推荐
相关产品推荐

