【发布时间】:2021-05-28 12:20:22
【问题描述】:
用户架构
const userSchema = new Schema({
name: { type: String, required: true },
phoneno: { type: String },
email: { type: String },
password: { type: String },
profilePic: { type: String },
socketId: { type: String },
});
module.exports = mongoose.model("User", userSchema);
用户聊天架构
const userChatSchema = new Schema({
message: { type: String, required: true },
sender: { type: Schema.Types.ObjectId, required: true, ref: "User" },
receiver: { type: Schema.Types.ObjectId, required: true, ref: "User" },
time: { type: Date, required: true },
});
module.exports = mongoose.model("UserChat", userChatSchema);
我需要一个查询来仅获取当前登录用户与所有其他用户的最后一个用户聊天,即当前登录用户可以是发送者或接收者的聊天,所有其他用户也可以是发送者或接收者,并且该聊天必须是最新登录用户和其他用户之间的聊天。
例如如果当前登录的用户是ObjectId("6039c2513b3fd51f3595d82f"),
那么查询必须给出以下输出:
[
{
_id: ObjectId("6039c2393b3fd51f3595d82e"),
name: "userONE",
phoneno: "123456",
latestMsg: {
_id: ObjectId("6039c2df3b3fd51f3595d833"),
message: "from userONE to userTWO 1",
receiver: ObjectId("6039c2513b3fd51f3595d82f"), // logged in user
sender: ObjectId("6039c2393b3fd51f3595d82e"),
time: ISODate("2021-02-27T03:56:15.122Z"),
},
},
{
_id: ObjectId("6039c25c3b3fd51f3595d830"),
name: "userTHREE",
phoneno: "12345678",
latestMsg: {
_id: ObjectId("6039c60ea8061225286e57e4"),
message: "from userTWO to userTHREE 4",
receiver: ObjectId("6039c25c3b3fd51f3595d830"),
sender: ObjectId("6039c2513b3fd51f3595d82f"), // logged in user
time: ISODate("2021-02-27T04:09:50.579Z"),
},
},
{
_id: ObjectId("6039c2673b3fd51f3595d831"),
name: "userFOUR",
phoneno: "123456789",
latestMsg: {
_id: ObjectId("6039c5f2a8061225286e57e2"),
message: "from userFOUR to userTWO 3",
receiver: ObjectId("6039c2513b3fd51f3595d82f"), // logged in user
sender: ObjectId("6039c2673b3fd51f3595d831"),
time: ISODate("2021-02-27T04:09:22.283Z"),
},
},
]
【问题讨论】:
-
如果您可以共享示例数据、您正在尝试的代码和预期的结果将会很棒:) Mongo playground 将是一个方便的工具。
-
供用户收藏[link]mongoplayground.net/p/vHjuYNJf4Oi
-
for UserChat 收藏 [link]mongoplayground.net/p/OvFz4Ao4wZe
-
可以在 Mongo Playground 中定义多个集合:
db={ "User": [ {},... ], "UserChat ": [ {},... ] }
标签: node.js mongodb mongoose mongodb-query aggregation-framework