У меня есть следующие документы
creditRequest (Написание только ключей, которые я хочу спроецировать)
{
"_id": "5f2bf26783f65d33026ea592",
"lendingpartner": {
/* some keys here */
},
"loans": [
{
"loanid": 43809,
"loanamount": 761256,
"jewels": [
"5f2bf26783f65d33026ea593",
"5f2bf26783f65d33026ea594"
"5f2bf26783f65d33026ea595"
],
}
]
}
pledgedJewel
{
"_id": "5f2bf26783f65d33026ea593",
"netweight": 8.52,
"purity": 19,
}
Я хочу достичь
{
"_id": "5f2bf2b583f65d33026ea603",
"lendingpartner": {
/* some keys here */
},
"loans": [
{
"loanid": 40010,
"loanamount": 100000,
"jewels": [
{
"_id": "5f2bf26783f65d33026ea593",
"netweight": 8.52,
"purity": 19,
},
{
"_id": "5f2bf26783f65d33026ea594",
"netweight": 5.2,
"purity": 40,
},
{
"_id": "5f2bf26783f65d33026ea595",
"netweight": 4.52,
"purity": 39,
}
]
}
]
}
Поскольку я хочу, чтобы детали драгоценностей были заполнены внутри массива драгоценностей каждого займа, $unwind
мне не поможет. (Я пробовал поэкспериментировать с этим)
Я думал, что могу запустить $map
в массиве ссуд, а затем запустить $lookup
для каждого драгоценного камня ссуды (двойная карта?), Но не смог придумать работоспособное решение. В любом случае, это казалось неправильным подходом.
Это лучшее, что я мог придумать (далеко не желаемый результат). Я использую карту для выборочного выбора ключей из объекта ссуд.
const loanrequests = await db.collection('loanrequest').aggregate([
{ $match: { requester: ObjectID(user.id) } },
{
$project: {
lendingpartner: {
name: 1,
branchname: '$branch.branchname',
},
loans: {
$map: {
input: '$loans',
as: 'loan',
in: {
loanid: '$$loan.loanid',
loanamount: '$$loan.amount',
jewels: '$$loan.jewels',
},
},
},
},
},
/*
* I experimented with unwind here. Tried adding
* { $unwind: '$loans' },
* { $unwind: '$loans.jewels' }
* but it does not give me the result I need (as already said before)
*/
]).toArray();
Я полагаю, мне нужно выполнить $lookup
перед проекцией, но мне сложно написать работоспособное решение из-за Двухуровневая вложенная структура документа (сначала массив loans
, а затем loans.jewels
)
Сегодня я начал работать с агрегаторами mongodb и пока искал ответы, наткнулся на похожий вопрос но это показалось мне более сложным и, следовательно, сложным для понимания.
Спасибо!