如何在 MongoDB 中的集合操作中访问数组元素的嵌套字段

How to access nested field of an array element inside a set operation in MongoDB

我试图在 $set 操作中访问数组元素的 nested field。 我有这样的文件,

{
  _id: ObjectId(),
  automated: [
      {
          price: 80.0,
          currency: 'USD',
          ...otherData
      },
      {
          price: 90.0,
          currency: 'INR',
          ...otherData
      },
      {
          price: 120,
          currency: 'USD',
          ...otherData
      }
  ]
}

我想创建一个 finalData 对象,它从数组的第一个元素中获取一些值。

所以我试过了,

mongodb.aggregate([
    {"$set": {
        "finalData" : {
            "price": "$automated.0.price",       // 0th index
            "currency": "$automated.0.currency"
        }
    }}
])

但这不起作用,结果是,

{
  _id: ObjectId(),
  finalData: {
    price: [],
    currency: []
  },
  ...otherData
}

我找不到任何类似的例子。 有人知道怎么做吗?

提前致谢!

编辑:

找到一个similar question. 建议的解决方案有效,

mongodb.aggregate([
    {"$set": {
        "finalData" : {
            "price": {
                "$arrayElemAt": ["$automated.0.price", 0]       // index used here
            },
            "currency": {
                "$arrayElemAt": ["$automated.0.currency", 0]
            }
        }
    }}
])

但这感觉并不直观,很高兴知道是否有任何替代方案。

"$automated.0.price" 语法用于 find/update 操作,但不用于聚合管道。

简单使用

mongodb.aggregate([
    {"$set": {
        "finalData" : {$first: "$automated"}
    }}
]) 

mongodb.aggregate([
    {"$set": {
        "finalData" : {
           price: {$first: "$automated.price"}, 
           currency: {$first: "$automated.currency"}
    }}
])