将$cond与 DBRef 比较一起使用时,运算符'$ref'无效



我有一个集合,其中两列"a"或"b"中的任何一列都可以指向用户。我正在执行一个聚合,该聚合将行与具有特定值的"a"或"b"相匹配,自然的做法是使用$group,使每个输出行的_id是与输入不匹配的列的值(因为输入用户以"a"one_answers"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。我找不到任何类似问题的参考资料(哈!)。

不能在聚合管道中使用DBRef。来自聚合指南:

聚合管道限制

具有聚合的聚合操作命令具有以下限制。

类型限制聚合管道(第7页)无法对以下类型:Symbol、MinKey、MaxKey、DBRef、Code和CodeWScope。

http://docs.mongodb.org/manual/MongoDB-aggregation-guide.pdf

最新更新