MongoDB聚合函数无法按预期运行

我正在尝试显示用户A和任何其他用户之间的最后一条消息的列表。这是我到目前为止的内容,但让我解释以下查询的错误之处:

如果用户A向用户B发送消息“ Test1”,并且用户B答复“ Test2”,然后用户A答复“ Test3”,则仅显示Test2消息。

“ Test1”消息将首先显示,因为它是会话中的第一条消息,但是从那以后,它将仅显示用户B的消息。

在这种情况下,我想要的行为是查询始终返回“ Test3”。这是我所拥有的:

我的模特:

const MostRecentMessageSchema = new Schema({
  to: {
    type: mongoose.Schema.Types.ObjectId,ref: "user"
  },from: {
    type: mongoose.Schema.Types.ObjectId,conversation: {
    type: mongoose.Schema.Types.ObjectId,ref: "conversation"
  },deletedBy: {
    type: [String]
  },date: {
    type: Date,default: Date.now
  }
});
        await MostRecentMessages.aggregate(
          [
            {
              $match: {
                $or: [
                  { from: mongoose.Types.ObjectId(userId) },{ to: mongoose.Types.ObjectId(userId) }
                ],deletedBy: { $ne: mongoose.Types.ObjectId(userId) },_id: { $ne: filteredIds }
              }
            },{ $project: { _id: 1,from: 1,to: 1,conversation: 1,date: 1 } },{ $sort: { date: -1 } },{
              $group: {
                _id: {
                  userConcerned: {
                    $cond: {
                      if: {
                        $eq: ["$to",mongoose.Types.ObjectId(userId)]
                      },then: "$to",else: "$from"
                    }
                  },interlocutor: {
                    $cond: {
                      if: {
                        $eq: ["$to",then: "$from",else: "$to"
                    }
                  }
                },from: { $first: "$from" },to: { $first: "$to" },date: { $first: "$date" },conversation: { $first: "$conversation" }
              }
            },{
              $lookup: {
                from: "conversations",localField: "conversation",foreignField: "_id",as: "conversation"
              }
            },{ $unwind: { path: "$conversation" } },{
              $lookup: {
                from: "users",localField: "to",as: "to"
              }
            },{ $unwind: { path: "$to" } },localField: "from",as: "from"
              }
            },{ $unwind: { path: "$from" } }
          ],function(err,mostRecentMessages) {
            if (err) {
              console.log("Error fetching most recent messages",err);
            } else {
              if (connectedUsersAllMessages[userId]) {
                allMessagesSocket.sockets.connected[
                  connectedUsersAllMessages[userId].socketId
                ].emit("response",{
                  mostRecentMessages
                });
              }
            }
          }
        );
      },5000);
    }

我在这里做错了什么?这是POC。它应该返回

  {
    from: "A",to: "C",number: 3,message: "A-C Test 4"
  },

但它返回

  {
    from: "C",to: "A",message: "A-C Test 3"
  },
caiczy000 回答:MongoDB聚合函数无法按预期运行

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3129604.html

大家都在问