Как сгруппировать последнее сообщение по имени пользователя

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

Я пробовал использовать match и group. Я нашел решение, рекомендующее использовать joins($lookup), но в конце концов понял, что может быть достаточно использования match и group.

userId я получаю от маршрута

     Message.aggregate(
              [
                { $match: { $or: [{ 'from.userId': userId }, { 'to.userId': userId }] } },
                // { $project: {...FIELDS}}, ///what to use here
                { $sort: { timestamp: -1 } },
                {
                  $group: {
                    "_id": {
                      'fromuserId': userId,//confusion here
                      // 'toUserId': userId,
                      // 'to.user'
                    },
                    // 'userId': { $first: '$from' },
                    // 'userId': { $first: '$to' },
                    msg: { $first: '$msg' },
                    timestamp: { $first: '$timestamp' }
                  }
                }
              ]
            ).exec((err, results) => {
              if (err) {
                console.info('err===>', err);
              }
              console.info('results|||', results)
            })

моя схема такова:

const MessageSchema = new mongoose.Schema({
      to: {
        userId: {
          type: mongoose.Schema.Types.ObjectId,// to be sent from client side 
          ref: "User",
          required: true
        },
        name: {
          type: String,
        },
        pictureUrl: {
          type: String,
        }
      },
      from: {
        userId: {
          type: mongoose.Schema.Types.ObjectId,// to be sent from server side 
          ref: "User",
          required: true
        },
        name: {
          type: String,
        },
        pictureUrl: {
          type: String,
        }
      },
      message: {
        type: String,
        required: true
      }
    },
      {
        timestamps: true
      }
    );

Я получаю пустой массив в качестве вывода. Мне нужно знать, как использовать id в $group. также как использовать to.userId или from.userId в id. это не позволяет точку (.) внутри id.

эй, внутри $group, вместо _id вы пытались передать "_id": { 'fromuserId': "$from.userId", 'toUserId': '$to.user', }

Saikat Chakrabortty 21.01.2019 08:07

все еще получаю пустой массив

Joy 21.01.2019 08:20

может быть для отладки, давайте сохраним _id:userId и проверим, приходят ли какие-либо данные.

Saikat Chakrabortty 21.01.2019 08:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
42
0

Другие вопросы по теме