如何获取按用户名分组的最后一条消息

时间:2019-01-21 06:37:24

标签: javascript mongodb mongoose

我正在尝试按发件人名称对用户收到的邮件进行分组。我想在每次聊天中显示最新消息,就像在whatsapp中一样。

我尝试使用匹配和分组。我找到了推荐使用joins($lookup)的解决方案,但最终意识到使用match和group可能就足够了。

我从路线获取的用户ID

     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.log('err===>', err);
              }
              console.log('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.userIdid。不允许在.内使用点(id)。

0 个答案:

没有答案