我有一个集合,其中“ 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/

10-14 13:42