我的问题与此密切相关,但并不相似.
我的收藏中有一个示例文档:
db.t.insert({"a":1,"b":2});
Run Code Online (Sandbox Code Playgroud)
我的目的是投影一个名为combinedtype 的字段array,其值为both a和btogether.([1,2]).
我只是尝试与一个$project阶段聚合:
db.t.aggregate([
{$project:{"combined":[]}}
])
Run Code Online (Sandbox Code Playgroud)
MongoDB抛出一个错误:disallowed field type Array in object expression.
这意味着不能将字段投影为数组.
但是当我使用$cond运算符投影数组时,该字段会被投影.
db.t.aggregate([
{$project:{"combined":{$cond:[{$eq:[1,1]},["$a","$b"],"$a"]}}}
])
Run Code Online (Sandbox Code Playgroud)
我得到了o/p : {"combined" : [ "$a", "$b" ] }.
如果您注意到输出,则将a和的值b视为文字,而不是字段路径.
任何人都可以向我解释这种行为吗?当我让条件失败时,
db.t.aggregate([
{$project:{"combined":{$cond:[{$eq:[1,2]},["$a","$b"],"$a"]}}}
])
Run Code Online (Sandbox Code Playgroud)
我得到的预期输出$a被视为一个字段路径,因为$a它不是作为数组元素包含的.