User Schema
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);
UserChat Schema
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);
I need a query to fetch only last userchat of currently logged in user with all other users i.e. a chat where currently logged in user can be sender or receiver and each of all other users can also be sender or receiver and that chat must be latest chat between logged in user and other user.
e.g. if currently logged in user is ObjectId("6039c2513b3fd51f3595d82f"),
then query must give following output:
[
{
_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"),
},
},
]