我有两个密钥A和B,它们在文档中的存在是相互排斥的.当A存在时,我必须按A分组,当B存在时,我必须按B分组.因此,我将所需的值输入到一个名为MyKey的计算键中,并对其执行$group.但看起来我在语法上犯了个错误.我试着用两种方式写$project:

{$project: {MyKey: {$cond: [{$exists: ["$A", true]}, "$A", "$B"]}}}

{$project: {MyKey: {$cond: [{"A": {$exists:true}}, "$A", "$B"]}}}

但我一直在犯错误:

{ "errmsg" : "exception: invalid operator '$exists'", "code" : 15999, "ok" : 0 } ...

怎么了?

推荐答案

$project中使用$ifNull而不是$cond:

{ $project: {MyKey: {$ifNull: ['$A', '$B'] }}}

如果A存在且不是null,则将使用其值;否则使用B的值.

Mongodb相关问答推荐

MongoDB:删除键上有条件的对象元素

MongoDB更新对象数组

MongoDB:检测所有重叠事件(开始/结束日期)?

如何在 MongoDB 中的集合下查找同一文档

MongoDB DB参考返回null值

MongoDB 聚合 groupBy 日期并计算子文档

从具有多个数组匹配 MongoDB 的两个集合中采样数据

查询有关 Go 项目中对象数组的 MongoDb 集合

如何聚合过滤器嵌套文档并从其他字段中获取值

更新 mongodb 文档中的特定字段

我怎样才能排序空值在 mongodb 中是最后排序的?

Mongoose $push 不断添加两个条目

从性能Angular 来看 MongoDB 嵌入式与参考

如何按季度分组日期?

MongoDB GridFS VS 直接磁盘 IO

Mongodb:为什么 show dbs 不显示我的数据库?

mongodb:upserting:仅在插入文档时设置值

如何在mongoose的嵌套填充中 Select 特定字段

是否可以使用聚合框架对 MongoDB 中的 2 个字段求和?

Mongoose upsert 不创建默认模式属性