Не могли бы вы просто использовать операции $ unwind и $ project для перезаписи поля itemId после выполнения поиска $?
Примерно так:
db.orders.aggregate([{
"$lookup": {
"from": "items",
"localField": "itemId",
"foreignField": "_id",
"as": "item"
}
}, {
"$unwind": "$item"
}, {
"$project": {
"_id": 0,
"itemId": "$item",
"quantity": 1
}
}]);
ОБНОВЛЕНИЕ
Посмотрев, как выглядят данные, вы можете попробовать сделать что-то вроде этого:
db.orders.aggregate([{
"$unwind": "$items"
}, {
"$lookup": {
"from": "items",
"localField": "items.itemId",
"foreignField": "_id",
"as": "item"
}
}, {
"$unwind": "$item"
}, {
"$group": {
"_id": "$_id",
"items": {
"$push": {
"itemId": "$item",
"quantity": "$items.quantity"
}
}
}
}]);
Первый $ unwind превращает массив элементов в отдельные объекты, которые затем могут быть используется в $ lookup для получения их записи из коллекции элементов. Второй $ unwind делает то же самое для поля нового элемента. И последняя группа $ объединяет все обратно на основе исходного _id из заказов, а $ pu sh переформатирует поле элементов в то, что вы хотите.