我正在使用Atlas App Services,它只支持MongoDB v4.4,并且不包括$getField
作为聚合运算符.我需要访问一个表达式返回的对象的字段,感觉这在没有$getField
的情况下一定是可能的,但不知道语法.
简单地说,如果我得了<expression>
分,除了:
$getField: {
field: "myFieldName",
input: <expression>
}
该文档暗示,只有以.
或$
开头的不常见的字段名称才需要$getField
.
下面是我需要的用例的一个更完整的示例,其中我希望将isOwner
设置为布尔值:
// Part of a $set in an aggregation
{ "isOwner" : {"$in" : [
userId,
{$getField: {
field: "ownerIds",
input: { $arrayElemAt: [ "$tasks", {
$indexOfArray: [
{ $map: { input: "$tasks", as: "task", in: "$$task._id" }},
"$$myId"
]
}]}
}}
]}}
这里有一些问题,但我的主要问题是,如果没有$getField
,我如何才能实现同样的目标.我也可能通过匹配ID来使从tasks数组中提取特定task的内部部分变得过于复杂--所以也很高兴有任何关于这方面的 comments !