преобразовать поле внутри массива объектов. агрегация mongodb - PullRequest
1 голос
/ 18 января 2020

У меня есть такой документ:

{
    "_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 в моей агрегации ?

Я не могу изменить его в базе данных по некоторым причинам.

1 Ответ

1 голос
/ 18 января 2020

Вы можете добавить ниже стадии до $lookup стадии

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