我有一个集合,其中有两列,' 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!)。
答案 0 :(得分:2)
您不能在聚合管道中使用DBRef。来自聚合指南:
汇总管道限制
聚合的聚合操作 命令具有以下限制。
类型限制 聚合管道(页面7)无法对值进行操作 以下类型:Symbol,MinKey,MaxKey,DBRef,Code和CodeWScope。
http://docs.mongodb.org/manual/MongoDB-aggregation-guide.pdf