Как сгруппировать записи в mongodb для приложения чата - PullRequest
0 голосов
/ 09 октября 2018

Мне нужен запрос в mongoDB для получения данных последнего чата user1 с несколькими пользователями.

пример данных:

{
    sender_id: user1
    receiver_id: user2
    message: "test"
    date: date1
},
{
    sender_id: user2
    receiver_id: user1
    message: "test"
    date: date2
},
{
    sender_id: user1
    receiver_id: user3
    message: "test"
    date: date1
},
{
    sender_id: user3
    receiver_id: user1
    message: "test"
    date: date2
}

Запрос будет группировать записинесколько пользователей.

1 Ответ

0 голосов
/ 09 октября 2018

Это query для вас.

Протестировано на MongoDB GUI

db.getCollection("chat").aggregate([
  { $match: { sender_id: "user1" } },
  {
    $group: {
      _id: "$receiver_id",
      date_message: { $push: { date: "$date", message: "$message" } },
      maxDate: { $max: "$date" }
    }
  },
  {
    $addFields: {
      date_message: {
        $arrayElemAt: [
          {
            $filter: {
              input: "$date_message",
              as: "message",
              cond: { $eq: ["$$message.date", "$maxDate"] }
            }
          },
          0
        ]
      }
    }
  },
  {
    $project: {
      _id: 1,
      date: "$date_message.date",
      message: "$date_message.message"
    }
  }
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...