Как я могу запросить mongodb для сравнения массивов объектов? - PullRequest
0 голосов
/ 08 февраля 2019

Я разрабатываю функцию обмена сообщениями.У меня есть коллекция пользователей, которая содержит такие вещи, как ID, имя и фамилия.У меня также есть коллекция сообщений, которая содержит массив значений, таких как идентификатор автора, тело сообщения и т. Д. И, наконец, у меня есть коллекция бесед, в которой есть идентификатор и участники, представляющие собой массив идентификаторов пользователей.

Я являюсьдумая, что это не очень хорошая структура, так как я хочу иметь возможность запускать запрос, который возвращает всех пользователей (ID, имя и фамилия), с которыми у данного пользователя есть история сообщений.Похоже, я не могу выполнить запрос, который вернет всю необходимую мне информацию.Нужно ли реструктурировать или есть способ выполнить этот запрос?

Вот пример структуры:

Conversation:
{ id: 123
  participants: ['<user ID here>', '<user ID here>'],
}

User:{
id:654,
firstName: John
lastName: Doe

Message:
{ sender: 'john', 
  content: 'howdy', 
  time_created: new Date(),
  converstationId: 123
},
{ sender: 'marry', 
  content: 'good u', 
  time_created: new Date(),
  converstationId: 123 
},

Я пробовал несколько вариантов из следующего, но яникогда не получал ничего, кроме пустого массива назад:

db.Users.aggregate([
    {
       $unwind: "$participants"
    },
    {
       $lookup:
          {
             from: "conversations",
             localField: "participants",
             foreignField: "_id",
             as: "response"
         }
    },
    {
       $match: { "response": { $ne: [] } }
    }
 ])

Итак, мой вопрос: как я могу получить всех пользователей, которые соответствуют идентификаторам пользователей в массиве участников?

1 Ответ

0 голосов
/ 08 февраля 2019

Ваш вопрос немного расплывчат, но я предполагаю, что вы ищете операцию lookup .Операция поиска MongoDB похожа на функцию соединения SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...