首页 > 解决方案 > MongoDB 聚合:无法使用 $cond 引用字段

问题描述

我正在对 MongoDB 集合执行聚合。主题之前的步骤$cond并不重要,因此为简洁起见,我将对其进行编辑:

db.mycoll.aggregate([
  { $match: ... },
  { $project: ... },
  { /* this is the problem step */ }
])

第 2 步生成的文档$project的形状如下:

{
  "blueTeam": true,
  "redTeam": false,
  "winner": true
}

现在假设我添加了一个额外的投影,它利用$cond- 我不允许处理投影文档中的字段。这是一个天真的例子:

{
  $project: {
    blueTeam: "$blueTeam",
    winnerAsInteger: {
      $cond: [ { "$winner": true }, 1, 0 ]
    }
  }
}

期望:管道发出文档,其中获胜文档的字段winnerAsInteger等于 1,否则为 0。

现实:此管道步骤会产生错误。

在Node的MongoDB客户端,报错如下:

(node:34380) UnhandledPromiseRejectionWarning: MongoError: Unrecognized expression '$winner'

在 MongoDB Compass 的聚合 GUI 中,错误是:

字段不得以“$”或“.”开头,字段路径为:$winner

这似乎与有关此的文档直接矛盾$该文档使用语法引用文档字段。

我在 MongoDB 4.0.5 上,物有所值。

标签: mongodbaggregation-framework

解决方案


尝试

{$eq:[ "$winner", true ]} instead of { "$winner": true }

由@s7vr 在评论中提供,只是在此处添加,以免人们认为这是一个未回答的问题!


推荐阅读