Привет всем. У меня есть 3 таблички. user_account { id,

billing_account_ids: [id] }
billing_account {id, user_id, currency_id }
currency { id }

Я пытаюсь из user_account собрать это все в один объект. Но получилось как-то сильно громоздко. Может можно как-то проще?

db.getSiblingDB("billing").getCollection("user_account")
.aggregate([
{
$match: {
_id: ObjectId("64549f7b5c809efe8f9bdb11")
}
},
{
$lookup: {
from: "billing_account",
localField: "billing_account_ids",
foreignField: "_id",
as: "billing_accounts"
}
},
{
$unwind: {
path: "$billing_accounts",
preserveNullAndEmptyArrays: true
}
},
{
$lookup: {
from: "currency",
localField: "billing_accounts.currency_id",
foreignField: "_id",
as: "billing_accounts.currency"
}
},
{
$unwind: {
path: "$billing_accounts.currency",
preserveNullAndEmptyArrays: true
}
},
{
$group: {
_id: "$_id",
billing_accounts: {$push: "$billing_accounts"},
otherFields: {$first: "$$ROOT"}
}
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: ["$otherFields", {
billing_accounts: {
$cond: [
{"$eq": [{"$size": "$otherFields.billing_account_ids"}, 0]},
[],
"$billing_accounts"
]
}
}]
}
}
},
])

3 ответов

48 просмотров

вполне обычный запрос, это ще не громоздко)

Проще только функции-утилиты писать, чтобы выглядело компактнее

но можно ваше условие про $size указать во втором лукапе, посмотрите на пример https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/#perform-an-uncorrelated-subquery-with--lookup

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
1. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта