我正在使用 nodejs 和 mongodb 創建一個聊天應用程式。我需要幫助來檢索兩個用戶之間的訊息。我面臨的挑戰是我不知道如何過濾兩個用戶之間的聊天,因為用戶可以是發件人或收件人。
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
})
uj5u.com熱心網友回復:
您可以在匹配聚合中使用$and和$in運算子來實作這一點,如下所示:
db.collection.aggregate([
{
$match: {
$and: [
{
fromUser: {
$in: [
"user1",
"user2"
]
}
},
{
toUser: {
$in: [
"user1",
"user2"
]
}
}
]
}
}
])
在貓鼬中,如果您的模型是 MessageModel 您的查詢必須是這樣的:
const messages = await MessageModel.aggregate([...])
Mongodb游樂場
您可能需要像這樣將 user1 和 user2 轉換為 ObjectId:
fromUser: {
$in: [
new mongoose.Types.ObjectId('user1'),
new mongoose.Types.ObjectId('user2')
]
}
uj5u.com熱心網友回復:
我建議完全按照您的需要獲取資料:
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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/503995.html
