#javascript #node.js #mongodb
Вопрос:
Допустим, у меня есть коллекция под названием «домашние животные».
Коллекция содержит три различных типа домашних животных: кошки, собаки и птицы
Теперь предположим, что в коллекции 10 кошек, 10 собак и 10 птиц (всего 30 документов).
Есть ли способ сделать один запрос к домашним животным, который даст мне 3 кошки, 2 собаки и 1 птицу?
В принципе, я хочу указать каждый тип питомца, которого я хочу, и ограничить каждый тип питомца определенным числом, и все это в одном запросе. Причина этого в том, что я хочу быть эффективным и не делать много запросов.
Это то, что у меня есть в настоящее время:
const docs = await db.collection('pets');
const cats = await docs
.find({ type: 'cat' })
.limit(3)
.toArray();
const dogs = await docs
.find({ type: 'dog' })
.limit(2)
.toArray();
const birds = await docs
.find({ type: 'bird' })
.limit(1)
.toArray();
Любая помощь будет очень признательна 🙂
Комментарии:
1. Вы можете использовать агрегированный запрос. Использование этапа $facet дает вам решение с одним запросом.
2. Спасибо! Это именно то, что мне было нужно
Ответ №1:
Благодаря prasad_, вот решение, которое решает мой случай:
const docs = await db.collection('pets')
.aggregate([
{
$facet: {
'cats': [
{ $match: { type: 'cat' } },
{ $limit: 3 },
],
'dogs': [
{ $match: { type: 'dog' } },
{ $limit: 2 },
],
'birds': [
{ $match: { type: 'bird' } },
{ $limit: 1 },
],
},
},
])
.toArray();