#mongodb
#mongodb
Вопрос:
Вот как выглядят мои документы:
Category:
_id:5f471cfb40868e7859587054
cat_name:"some category"
resource_owner:"test"
Item:
_id:5f471cfb40868e7859587044
item_name:"awesome item 1"
resource_owner:"test"
_id:5f471cfb40868e7859587099
item_name:"awesome item 2"
resource_owner:"test"
Я пишу агрегацию для извлечения записей из этих коллекций с помощью $lookup
и $set
для преобразования _id
в строку. Это работает для родительской коллекции (категории), но не работает с дочерней коллекцией Item
.
Вот как выглядит мой агрегированный конвейер:
[
{
'$lookup': {
'from': 'item',
'localField': 'resource_owner',
'foreignField': 'resource_owner',
'as': 'products'
}
}, {
'$match': {
'_id': ObjectId('5f471cfb40868e7859587054')
}
}, {
'$set': {
'_id': {
'$toString': '$_id'
},
'products._id': {
'$toString': '$_id' <--this sets parent's _id to child's _id
}
}
}
]
Как мне изменить вышеуказанное $set
, чтобы преобразовать _id дочерней коллекции в строку, возможно, без использования $unwind
?
Я использую mongodb 4.4
Ответ №1:
Вы можете попробовать оператор $map,
{
"$set": {
"_id": { "$toString": "$_id" },
"products": {
$map: {
input: "$products",
in: {
$mergeObjects: [
"$$this",
{ _id: { $toString: "$$this._id" } }
]
}
}
}
}
}