无效的运营商' $ ref'使用带有DBRef比较的$ cond时

时间:2014-04-25 00:39:57

标签: javascript mongodb mongodb-query

我有一个集合,其中有两列,' a'或者' b'可以指向用户。我正在执行一个将行匹配为' a'或者' b'具有特定值,并且自然要做的是使用$ group,使得每个输出行的_id是与输入不匹配的任何列的值(因为输入用户的存在为'显然暗示了'或' 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!)。

1 个答案:

答案 0 :(得分:2)

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

  

汇总管道限制

     

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

     

类型限制   聚合管道(页面7)无法对值进行操作   以下类型:Symbol,MinKey,MaxKey,DBRef,Code和CodeWScope。

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