Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用数组的值';mongodb聚合期间表达式中的子文档?_Mongodb_Aggregation Framework - Fatal编程技术网

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

可以使用数组的值';mongodb聚合期间表达式中的子文档?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,假设我有这个文件: { _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]}

假设我有这个文件:

{
  _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
,但没有效果。

您可以使用:

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