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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:04