我有一个集合,其中“ a”或“ b”两列中的任何一个都可以指向用户。我正在执行一个聚合,以匹配具有特定值的'a'或'b'的行,并且自然要做的事情是使用$ group,使每个输出行的_id是没有列的值匹配输入(因为显然暗示了输入用户为'a'或'b',并且这些列没有特殊含义)。在我看来,此查询似乎应该有效:
db.collection.aggregate(
{'$project': {'a': 1, 'b': 1}},
{'$group': {'_id': {'$cond':
[{'$eq': ['$a', DBRef('users', ObjectId('533af99ca41fd238a4c60f3f'))]},
'$b', '$a']}}})
这就是总数的最低限度。它失败并显示:
Fri Apr 25 01:31:28.140 aggregate failed: {
"errmsg" : "exception: invalid operator '$ref'",
"code" : 15999,
"ok" : 0
} at src/mongo/shell/collection.js:898
显然,Mongo正在插值DBRef。我找不到类似问题的任何参考文献(ha!)。
最佳答案
您不能在聚合管道中使用DBRef。从汇总指南中:
聚合管道限制
聚合操作与合计
命令具有以下限制。
类型限制
聚合管道(第7页)无法对
以下类型:Symbol,MinKey,MaxKey,DBRef,Code和CodeWScope。
http://docs.mongodb.org/manual/MongoDB-aggregation-guide.pdf
关于javascript - 将$ cond与DBRef比较一起使用时,无效的运算符'$ ref',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23282271/