> Как доставать данные из нескольких коллекций одновременно в базах данных (Node.js, JavaScript, MongoDB, Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: TrendTech
Стек: Node.js, JavaScript, MongoDB, Go
> Пример ответа
Для извлечения данных из нескольких коллекций MongoDB в Node.js используется агрегационный пайплайн с оператором $lookup. Это аналог JOIN в SQL. Пример:
JAVASCRIPTconst { MongoClient } = require('mongodb');async function getOrdersWithUsers() {const client = await MongoClient.connect('mongodb://localhost:27017');const db = client.db('shop');const result = await db.collection('orders').aggregate([{$lookup: {from: 'users',localField: 'userId',foreignField: '_id',as: 'user'}},{ $unwind: '$user' },{$project: {orderId: 1,total: 1,'user.name': 1,'user.email': 1}}]).toArray();client.close();return result;}
Если нужно объединить данные из трех коллекций (например, заказы, пользователи, товары), добавляем второй $lookup:
JAVASCRIPTdb.collection('orders').aggregate([{$lookup: {from: 'users',localField: 'userId',foreignField: '_id',as: 'user'}},{ $unwind: '$user' },{$lookup: {from: 'products',localField: 'productIds',foreignField: '_id',as: 'products'}}])
Для простых случаев (небольшие коллекции) можно использовать два отдельных запроса и объединить на клиенте:
JAVASCRIPTconst user = await db.collection('users').findOne({ _id: userId });const orders = await db.collection('orders').find({ userId }).toArray();const combined = { user, orders };
Но агрегация эффективнее, так как выполняется на стороне БД, уменьшая сетевые задержки. В Go аналогично используется драйвер MongoDB с пайплайном через bson.D.
> Похожие задачи по backend
Какие подходы и стратегии кэширования существуют в Node.js для улучшения производительности работы с базами данных
Когда требуется денормализация базы данных и хранение одних и тех же данных в разных таблицах или коллекциях
Как Node.js работает с файловой системой и какие библиотеки используются
Доводилось ли работать с многопоточностью в Node.js
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью