ฉันสร้างสคีมาข้อความของฉันดังต่อไปนี้:-
{
_id : message_unique_id,
recipients : [ user_id1,user_id2,user_id3 ],
message : "Hello Word",
readBy : [user_id2,user_id3],
chatId : unique_id_for_every_chat
}
ตอนนี้ฉันสามารถรับข้อความสุดท้ายของแต่ละการสนทนาได้ แต่ไม่สามารถนับจำนวนข้อความที่ยังไม่ได้อ่านได้ สิ่งที่ฉันใช้มีดังนี้:-
Messages.aggregate([
{ $match : {recipients : {$in : [my_user_id]},
{ $project : {
chatId : 1,
recipients : 1,
readBy : 1
}, { $group : {
_id : "$chatId",
message : "$last" : "$message"} }}]).exec();
ข้อความค้นหาข้างต้นใช้งานได้ดีและส่งคืนข้อความสุดท้ายของแต่ละแชทที่ผู้ใช้ทำ แต่ตอนนี้ฉันต้องการนับข้อความที่ยังไม่ได้อ่านด้วย ฉันใช้แบบสอบถามต่อไปนี้: -
Messages.aggregate([
{ $match : {recipients : {$in : [my_user_id]},
{ $project : {
chatId : 1,
recipients : 1,
readBy : 1,
unread: {
$cond: { if : { "$readBy" : {$in : [my_user_id]}}, then :
0, else : 1 }
}
},
{ $group : {
_id : "$chatId",
unreadCount : { $sum: "$unread" },
message : "$last" : "$message"} }}]).exec();
แต่แบบสอบถามนี้ส่งคืนค่าว่าง กรุณาช่วย.