Освоение запросов отношений в MongoDB: подробное руководство

Метод 1: встроенные документы
MongoDB позволяет встраивать связанные документы в родительский документ. Этот метод денормализации полезен, когда связанные данные невелики и не меняются часто. Давайте рассмотрим пример, где у нас есть коллекция «пользователи» и коллекция «комментарии». Каждый пользователь может иметь несколько комментариев. Чтобы включить комментарии при запросе пользователей, вы можете использовать оператор $lookupв сочетании с $match:

db.users.aggregate([
  {
    $lookup: {
      from: "comments",
      localField: "_id",
      foreignField: "userId",
      as: "comments",
    },
  },
]);

Метод 2: Ссылки на руководство
Другой подход заключается в использовании ссылок на руководство, когда вы сохраняете ссылки на связанные документы в родительском документе. Например, предположим, что у нас есть коллекция «пользователи» и коллекция «продукты», и у каждого пользователя может быть несколько любимых продуктов. Вот как можно добавить избранные продукты, используя ссылки вручную:

db.users.find({}).forEach(function(user) {
  user.favoriteProducts = db.products.find({ userId: user._id }).toArray();
  db.users.save(user);
});

Метод 3: ссылки на ObjectId
В MongoDB каждый документ имеет уникальный ObjectId. Вы можете использовать это свойство для установления связей между коллекциями. Продолжая наш пример «пользователи» и «комментарии», давайте посмотрим, как включать комментарии с помощью ссылок ObjectId:

const userId = ObjectId("user_id_here");
db.comments.find({ userId: userId });

Метод 4: ссылки на базы данных
MongoDB также предоставляет функцию под названием «Ссылки на базы данных», с помощью которой вы можете поддерживать связи между коллекциями с помощью полей $refи $id. Этот метод требует создания справочного документа. Вот пример:

db.users.insert({ name: "John Doe", comments: [DBRef("comments", ObjectId("comment_id_here"))] });
db.comments.findOne({ _id: ObjectId("comment_id_here") });

В этой статье мы рассмотрели несколько методов включения связей в запросы MongoDB. Мы рассмотрели встроенные документы, ссылки на руководства, ссылки ObjectId и ссылки на базы данных. Каждый метод имеет свои преимущества и подходит для разных сценариев. Поняв эти методы, вы сможете эффективно управлять отношениями между коллекциями в MongoDB и оптимизировать запросы к базе данных.

Не забудьте выбрать наиболее подходящий метод в зависимости от вашего конкретного случая использования с учетом таких факторов, как размер данных, производительность запросов и согласованность данных. Удачных запросов!