[英]Mongoose filter using or condition
I am creating a chat application using nodejs and mongodb.我正在使用 nodejs 和 mongodb 创建一个聊天应用程序。 I need need help retrieving messages between two users.
我需要帮助来检索两个用户之间的消息。 The challenge am facing is I don't know how to filter the chats between two users since a user can be a sender or a recipient.
我面临的挑战是我不知道如何过滤两个用户之间的聊天,因为用户可以是发件人或收件人。
const messageSchema = new mongoose.Schema({
content:{type:String, required:true},
fromUser:{type:mongoose.Schema.Types.ObjectId, ref:'User'},
toUser:{type:mongoose.Schema.Types.ObjectId, ref:'User'},
messageRead:{type:Boolean, default:false}
},{
timestamps:true
})
You can achieve this using $and and $in operators in a match aggregation like this:您可以在匹配聚合中使用$and和$in运算符来实现这一点,如下所示:
db.collection.aggregate([
{
$match: {
$and: [
{
fromUser: {
$in: [
"user1",
"user2"
]
}
},
{
toUser: {
$in: [
"user1",
"user2"
]
}
}
]
}
}
])
In mongoose if your model is MessageModel your query must be like this:在 mongoose 如果您的 model 是 MessageModel 您的查询必须是这样的:
const messages = await MessageModel.aggregate([...])
I recommend getting the data exactly as you want it:我建议完全按照您的需要获取数据:
const userA = new ObjectId('user_a_id');
const userB = new ObjectId('user_b_id');
const messages = await MessageModel.find({
$or: [
{ fromUser: userA, toUser: userB },
{ fromUser: userB, toUser: userA },
]
}).exec();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.