我的问题与this密切相关,但不相似。项目阶段操作员在投影阵列中的行为
我有我收集的样本文件:
db.t.insert({"a":1,"b":2});
我的意图是项目名为array
型combined
既a
和b
共同的价值观领域。 ([1,2])
。
我只是尝试用$project
阶段汇总:
db.t.aggregate([
{$project:{"combined":[]}}
])
MongoDB
抛出一个错误:disallowed field type Array in object expression
。
这意味着一个字段不能投影为数组。
但是,当我使用$cond
运营商投影数组,该字段被投影。
db.t.aggregate([
{$project:{"combined":{$cond:[{$eq:[1,1]},["$a","$b"],"$a"]}}}
])
我得到了o/p:{"combined" : [ "$a", "$b" ] }
。
如果您注意到输出,将a
和b
的值视为它们是文字而不是字段路径。
任何人都可以请向我解释这种现象?当我做失败的情况下,
db.t.aggregate([
{$project:{"combined":{$cond:[{$eq:[1,2]},["$a","$b"],"$a"]}}}
])
我得到预期的输出,其中$a
被视为田间小路,因为$a
不括作为数组元素。
感谢您的解释和链接。我想,一个部件上的文档可以提高,是在引入部分为每个操作员,或者至少一个流水线阶段,其中规定,管道的语法是如何让解析并解释在服务器上,这样我们就可以推断那些在文档中没有明确提及的小东西。 – BatScream
感谢您的详细解释!帮助我的聚合查询 - http://stackoverflow.com/questions/40259171/mongo-aggregation-query-in-golang-with-mgo-driver –