我正在尝试使用MongoDB聚合框架解决以下情况。我的entities
收藏集中的文档已经
_id.type
字段,可以是""
,null
或非空字符串,并且attr
字段,它是一个字符串。 我想按_id.type
分组,但是""
和null
中的元素必须属于同一组。我正在聚合管道中尝试此阶段:
{
"$group": {
"_id": {"$cond": [{"$in": ["$_id.type", [null, ""]]}, "", "$_id.type"]},
"attrNames": {
"$addToSet": "$attrName"
}
}
},
我的理解是_id
为该小组定义了密钥,所以我想达到的目标是
_id.type
是null
或""
,则使用$cond
数组中的第二个元素,因此键为""
(因此将这两种特殊情况放在同一组)$cond
数组中的第3个元素,因此键为_id.type
但是我收到以下错误消息:
管道阶段规范对象必须只包含一个字段。
所以我想我做得不好。
请问我应该如何修改聚合语句(或使用新的聚合语句)来解决这种情况?
答案 0 :(得分:0)
正如评论中所建议的(谢谢!),发生的情况是我错误地使用了聚合语法。使用以下语句有效:
> db.entities.aggregate({
"$group": {
"_id": {"$cond": [{"$in": ["$_id.type", [null, ""]]}, "", "$_id.type"]},
"attrNames": {
"$addToSet": "$attrName"
}
}
})