Nodejs + Mongodb выборка(типа 2-я нормальная форма, справочник)

Есть 2 коллекции: Users(_id, email) и Categories(_id, name, user). Нужно получить массив с именами категорий и email-ом юзера ее создавшего.

Нашел решение делая выборку отдельно из двух коллекций, формируя новый массив объектов через map и find.

const allCategories = await Categories.find();
const allUsers = await Users.find();

const data = allCategories.map((c) => {
  const user = allUsers.find((i) => String(i._id) === String(c.user));
  return {
    category: c.name,
    user: user.email
  }
});

Возможно ли сделать такую выборку средствами базы данных одним запросом?


Ответы (1 шт):

Автор решения: Sergio Glock

Такой запрос дает нужный результат

db.getCollection('categories').aggregate([
   {
     $lookup:
       {
         from: "users",
         localField: "user",
         foreignField: "_id",
         as: "user_info"
       }
  }
])
→ Ссылка