MongoDB中使用带$cond条件的find查询报错该如何处理?
报错原因
- 核心错误:
$cond是聚合操作符,不支持直接在普通find方法的查询过滤条件中使用,普通查询仅支持字段值匹配类的查询操作符,无法直接运行动态判断表达式。 - 字段引用错误:你代码中
$strcasecmp的第一个参数写的是字符串常量"user",要引用当前文档的user字段,需要写成$user,现有写法逻辑完全失效。 - 业务逻辑错误:现有写法是将
deleted字段值和$cond返回的布尔值做全等匹配,和你要求的「自己的回答无论删除状态都返回、他人回答仅返回未删除内容」的逻辑完全不符。
解决方案
推荐使用更简单、性能更好的普通查询写法,用$or组合两种业务场景即可:
Answer.find({ _id: { $in: requiredAnswers }, $or: [ // 场景1:回答为当前登录用户创建,所有状态都返回 { user: req.user.id }, // 场景2:回答为其他用户创建,仅返回未删除内容 { user: { $ne: req.user.id }, deleted: false } ] })
如果你需要使用表达式写法实现,可通过$expr包裹聚合表达式,写法如下:
Answer.find({ _id: { $in: requiredAnswers }, $expr: { $cond: [ { $eq: ["$user", req.user.id] }, true, { $eq: ["$deleted", false] } ] } })
内容的提问来源于stack exchange,提问作者Yashi
相关产品推荐
相关产品推荐

