繁体   English   中英

可以在 mongodb 聚合期间在表达式中使用数组子文档的值吗?

[英]Possible to use value of an array's subdocument in an expression during mongodb aggregation?

假设我有这个文件:

{
  _id: 0,
  array: [{a: 120}, {a: 2452}]
}

我想获得:

{
  _id: 0,
  array: [{a: 120}, {a: 2452}],
  a1x2: 240 // array[0].a * 2
}

目前,在聚合中,我能想到的最简单的方法是:

db.collection.aggregate([{
  $match: {}
}, {
  $set: {aTmp: {$arrayElemAt: ["$array", 0]}}
}, {
  $project: {
    array: 1,
    a1x2: {$multiply: ["$aTmp.a", 2]},
    aTmp: 0
  }
}

有没有办法在没有设置aTmp的中间步骤的情况下做到这一点? 当键的形式为{$arrayElemAt: ["$array", 0]}时,我不知道如何获取键的子文档值。

我也尝试使用$array.0.a$array[0].a ,但无济于事。

您可以使用$let

db.collection.aggregate([
  { $addFields: {
      a1x2: { $let: {
          vars: {
            aTmp: {$arrayElemAt: ["$array", 0]}
          },
          in: {$multiply: ["$$aTmp.a", 2]}
      }}
  } }
])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM