Привет всем. У меня есть 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 ответов

43 просмотра

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

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

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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
2
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
кто-нибудь уже пробовал это?
Lencore
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
❓ Подскажите как сделать в группе телеги функцию (кнопку) пересылки сообщения где есть нарушение правил? Бот к каждому сообщению (по определенным ключам) добавляет снизу кнопк...
Alexander
4
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
8
Карта сайта