我正在使用套接字 io 编写用于聊天的 API。我在数据库中有以下数据结构。当用户 A 向用户 B 发送消息时,通过以下示例保存的数据 { "from": "A", "to": "B" }。当用户 B 响应时,结构如下 { "from": "B", "to": "A" }。
{
"_id" : ObjectId("606ea000c9ef8e1501d610d1"),
"message" : "I am fine!",
"from" : "User1",
"to" : "Plurl",
"time" : ISODate("2021-04-08T06:17:36.757Z"),
"__v" : 0
}
{
"_id" : ObjectId("606e9ff8c9ef8e1501d610d0"),
"message" : "how are u?",
"from" : "Plurl",
"to" : "User1",
"time" : ISODate("2021-04-08T06:17:28.252Z"),
"__v" : 0
}
{
"_id" : ObjectId("606e9ff8c9ef8e1505d610d0"),
"message" : "Hi?",
"from" : "User4",
"to" : "User3",
"time" : ISODate("2021-04-08T06:17:28.252Z"),
"__v" : 0
}
我需要以某种方式从数据库中为用户 A 和用户 B 获取数据,并按时间对这些数据进行排序。我正试图以这种方式做到这一点。并且可能存在仅从用户 A 到 B 的消息的情况,即如果用户 B 没有响应。
const messages = await Message.find( {
$and: [
{ from: { $eq: req.query.user } },
{ to: { $eq: req.user.name } },
{ from: { $eq: req.user.name } },
{ to: { $eq: req.query.user } }
],
sort:{
time: -1
}
})