Saya membuat skema pesan saya sebagai berikut: -
{
_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
}
Sekarang saya bisa mendapatkan pesan terakhir dari setiap percakapan, tetapi tidak bisa menghitung jumlah pesan yang belum dibaca. Apa yang saya gunakan adalah sebagai berikut: -
Messages.aggregate([
{ $match : {recipients : {$in : [my_user_id]},
{ $project : {
chatId : 1,
recipients : 1,
readBy : 1
}, { $group : {
_id : "$chatId",
message : "$last" : "$message"} }}]).exec();
Kueri di atas berfungsi dengan baik dan mengembalikan pesan terakhir dari setiap obrolan yang dilakukan oleh pengguna. Tapi sekarang saya ingin menghitung jumlah pesan yang belum dibaca juga. Saya menggunakan kueri berikut: -
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();
Namun kueri ini mengembalikan nol. Tolong bantu.