mongodb - 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 上,物有所值。
解决方案
尝试
{$eq:[ "$winner", true ]} instead of { "$winner": true }
由@s7vr 在评论中提供,只是在此处添加,以免人们认为这是一个未回答的问题!
推荐阅读
- angular - Angular - 保存提交按钮未保存到数据库中
- python - 如何正确定义 Keras 循环层的 input_dim
- css - 将父元素变换为凹形,同时也分别变换其子元素
- python-3.x - 如何删除 DM 中的机器人消息?
- javascript - 如何在我对弹性搜索的一半请求中修复“400 Bad request”?
- html - 我的下拉内容不会显示,但在我移动标题之前它会显示
- javascript - 使用条件设置下一个标签/类
- php - MySQL Wordpress Nginx dnsmasq:错误:建立数据库连接时出错
- terminal - oh-my-zsh 飞船错误 - 没有这样的文件或目录
- javascript - 如何检测句子中的句子
包含句点之间的标签的标签