MongoDB - Найти записи, которые не имеют ссылки на родительский документ - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь сделать групповое оповещение, при котором пользователи получают оповещения при доступе к веб-сайту node.js, клонируя фактический документ для сохранения состояния просмотра отдельного оповещения.Ниже приведены основные примеры данных для коллекции предупреждений .

db.alerts.insertMany([
  {
    "text" : "Alert 1",
  },
  {
    "text" : "Alert 2",
  },
  {
    "_id": ObjectId("5ba8e5ef24e03456b5cb0afa"),
    "text" : "Alert 3",
  },
  {
    "_id": ObjectId("5ba8e5ef24f03456b5cb0afa"),
    "text": "Alert 4"
  },
  {
    "text": "Alert 4",
    "master_id": ObjectId("5ba8e5ef24f03456b5cb0afa"),
    "user_id": 1
  },
  {
    "text": "Alert 3",
    "master_id": ObjectId("5ba8e5ef24e03456b5cb0afa"),
    "user_id": 1
  },
  {
    "text": "Alert 4",
    "master_id": ObjectId("5ba8e5ef24f03456b5cb0afa"),
    "user_id": 2
  },
]);

Если я использую $lookup, я могу получить документы, которые не имеют дочерних документов, выполнив следующую команду

db.getCollection('alerts').aggregate([
    {
        $lookup: {
            from: "alerts",
            localField: "_id",
            foreignField: "master_id",
            as: "related_record"
        }
    },
    {
        $match: {
            "master_id": null,
            "related_record": {$eq: []}
        },
    }
]);

Тем не менее, если мне нужно получить конкретное значение для user_id: 1, что я должен пройти дополнительно?Или как мне его реструктурировать?

1 Ответ

0 голосов
/ 24 сентября 2018

Просто измените стадию матча следующим образом:

...,
$match:
{
  "master_id": null,
  "related_record.user_id": 1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...