$lookup в массиве объектов mongodb
Есть коллекция books в которой данные хранятся в некотором виде. У меня задача через lookup получить коментарии и информацию о пользователе, который оставил коментарий. У меня получилось заменить id на информацию с коментарием и потом id пользователей заменить на их информацию. Но моё решение частично работает т.к. не получается сделать получение информации о пользователе через let и pipeline в lookup. Из-за того, что id может быть в виде строки, по этому и есть необходимость в реализации через let и pipeline.
Образец исходного
"book":{
_id:...,
...,
//Array<String>
comments:[
"609331be9eaf660870f7115c",
"609331be9eaf660870f7115d",
"609331be9eaf660870f7115e",
"609331be9eaf660870f7115f",
"612639cb6fd55ca429d723bd"
]
}
Первая итерация
{ $lookup: {
from: 'comments',
let: {id: "$_id"},
pipeline: [
{$match:
{$expr: {
$or:[
{$eq: ["$_bookId", "$$id"]}, //Если оно ObjectId
{$eq: ["$_bookId", { $toString: "$$id" }]} //Если оно String
]
}
}
}
],
as: 'comments'
}}
Результат после первой итерации:
"book":{
_id:...,
...,
//Array<Object>
comments:[
{
"_id": "609331be9eaf660870f7115c",
"_user": "608b8e66c339f71634642f68",
"text": "Какой-то текст"
},
...
]
}
Вторая итерация без использования let и pipeline
{ $lookup: {
from: 'users',
localField:'comments._user',
foreignField:'_id',
as: 'comments_user'
}}
Попытки не удачные:
{ $lookup: {
from: 'users',
let: {id_temp: "$сomments"}, //"$сomments._user"
pipeline: [
{$match:
{$expr: {
$or:[
{$eq: ["$_id", "$$id_temp"]},
{$eq: ["$_id", { $toString: "$$id_temp" }]}
]}
}}
],
as: 'comments_user'
}}