mongodb - 转换对象数组内的字段。 mongodb聚合

标签 mongodb nosql aggregation-framework

我有一个这样的文档:

{
    "_id" : ObjectId("5e22a400d4abfae27d173292"),
    "bundle_items" : [ 
        {
            "id" : "5e201c30d4abfae27d171851"
        }, 
        {
            "id" : "5e201c3dd4abfae27d171862"
        }, 
        {
            "id" : "5e201c4e66cb0c3ede4124d5"
        }
    ]
}

我的聚合是:

[
        {
            $lookup : {
                from : 'product',
                localField   : 'bundle_items.id', // problem is here, i need this field to be ObjectId
                foreignField : '_id',
                as: 'bundle_items_objects'    
            }
        },{
            $project: {
                'bundle_total_regular_prices': {
                '$sum': '$bundle_items_objects.regular_price'
                },
                'bundle_items' : 1,
            }
        }
]

如何将聚合中的bundle_items.*.id 转换为ObjectId?

由于某些原因,我无法在数据库上更改它。

最佳答案

您可以在 $lookup 阶段之前添加以下阶段

{
        "$addFields": {
        "bundle_items": {
          "$map": {
                "input": "$bundle_items",
                "in": {
                    id: {
                        "$toObjectId": "$$this.id"
                    }
                }
            }
        }
      }
  }

关于mongodb - 转换对象数组内的字段。 mongodb聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59798138/

相关文章:

mongodb - mongo 将单个对象转换为一个元素数组

node.js - 使用 mongoose 更新具有多个嵌入式文档数组的 mongodb 文档

firebase - Firestore查询多个父文档的所有子集合

mysql - 结合使用 mongoDb 和 MySQL

cassandra - 如何使用 Java 在 Cassandra 中检索表名?

mongodb - 为什么多值字段在关系数据库中不是一个好主意

node.js - 如何对外键进行条件聚合查找

node.js - mongoose/mongodb 在聚合期间是否可以访问模式中的对象引用?

javascript - Mongoose 找到多个匹配项

mongodb - 在 DBeaver 中连接到 Redis 或 MongoDB