我正在尝试计算一些数字,但是当使用$ divide运算符中的先前计算变量时,MongoDB返回null
这是查询:
db.apps.aggregate(
{$project : {
a: {$multiply : [2,2]},
b: {$divide: [5, "$a"]},
c: {$divide: [5, 4]}
}})
为什么“b”在结果中为空:
/* 0 */
{
"result" : [
{
"_id" : ObjectId("5361173d93861f6e5239714e"),
"a" : 4,
"b" : null,
"c" : 1.25
},
{
"_id" : ObjectId("536192c1938652d039fa0051"),
"a" : 4,
"b" : null,
"c" : 1.25
}
],
"ok" : 1
}
修改: 感谢Neil的评论,解决方案是进行第二阶段的$ project
db.apps.aggregate(
{$project : {
a: {$multiply : [2,2]},
b: {$divide: [5, "$a"]},
c: {$divide: [5, 4]}
}},
{$project : {
a: 1, c:1,
b: {$divide: [5, "$a"]},
}}
)
答案 0 :(得分:1)
$project
步骤中的变量始终是该步骤的输入文档的字段。您无法访问在同一步骤中计算的任何值。但您可以在以下$ project步骤中访问任何计算值。因此,您可以将计算分成两个$ project项目步骤:
db.apps.aggregate(
[
{ $project : {
a: { $multiply : [2, 2] }
}
},
{ $project : {
a: 1,
b: { $divide: [5, "$a"] }
}
}
]
);
答案 1 :(得分:0)
现在您可以使用let了。这样:
db.apps.aggregate([{
$project: {
b: {
$let: {
vars: {
"a": {$multiply: [2,2]}
},
in: {$divide: [5, "$$a"]}
}
}
}}
]);