我有一个集合,其中两列"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