Javascript MongoDB聚合函数未按预期工作
我正在尝试显示用户a和任何其他用户之间的最后消息列表。以下是我到目前为止得到的信息,但让我解释一下以下查询的错误: 如果用户A向用户B发送消息“Test1”,用户B回复“Test2”,然后用户A回复“Test3”,则只显示Test2消息 “Test1”消息将首先显示,因为它是会话中的第一条消息,但从那时起,它将只显示用户B的消息 在本例中,我希望查询始终返回“Test3”。以下是我所拥有的: 我的模型:Javascript MongoDB聚合函数未按预期工作,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我正在尝试显示用户a和任何其他用户之间的最后消息列表。以下是我到目前为止得到的信息,但让我解释一下以下查询的错误: 如果用户A向用户B发送消息“Test1”,用户B回复“Test2”,然后用户A回复“Test3”,则只显示Test2消息 “Test1”消息将首先显示,因为它是会话中的第一条消息,但从那时起,它将只显示用户B的消息 在本例中,我希望查询始终返回“Test3”。以下是我所拥有的: 我的模型: const MostRecentMessageSchema = new Schema({
const MostRecentMessageSchema = new Schema({
to: {
type: mongoose.Schema.Types.ObjectId,
ref: "user"
},
from: {
type: mongoose.Schema.Types.ObjectId,
ref: "user"
},
conversation: {
type: mongoose.Schema.Types.ObjectId,
ref: "conversation"
},
deletedBy: {
type: [String]
},
date: {
type: Date,
default: Date.now
}
});
我做错了什么?这是一本书。它应该会回来
{
from: "A",
to: "C",
number: 3,
message: "A-C Test 4"
},
但它回来了
{
from: "C",
to: "A",
number: 3,
message: "A-C Test 3"
},
我强烈建议包括一个小样本的数据和一个预期的结果,这实际上可以从该数据中获得。请注意,“模式”在这里并不重要。无论如何,
aggregate()
语句中没有任何内容关注模式。还要注意,您要求在此处使用$lookup
,因此显然还有另一个包含相关文档的集合。为人们提供足够的数据,以便他们自己重现期望的结果。我添加了一个POC。您的POC似乎与您问题中的模式不匹配。在操场上的配置中,没有日期/时间字段,因此您按数字字段进行排序,但有多条消息具有相同的数字,因此$first
操作符返回数组中恰好位于第一位的消息。如果给“A-C测试4”编号4,它将正确排序并给出所需结果。
{
from: "C",
to: "A",
number: 3,
message: "A-C Test 3"
},