Cara mendapatkan hitungan yang belum dibaca

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.


person gourav sarswa    schedule 18.10.2019    source sumber


Jawaban (1)


Ganti nilai baca $project dengan di bawah ini:

 unread: {$cond: {
            if: {$gte: [{$indexOfArray: ["$readBy", my_user_id]}, 0]}, then: 0, else: 1
         }}

mencoba

 unread: {
        $cond: {
          if: {
            "$setIsSubset": [
              [my_user_id],
              "$readBy"
            ]
          },
          then: 0,
          else: 1
        }
      }

Ini berhasil dalam kasus saya.

person sushant mehta    schedule 18.10.2019
comment
Ini memberikan kesalahan. MongoError : operator tidak valid '$indexOfArray. - person gourav sarswa; 18.10.2019
comment
Saya rasa saya perlu memutakhirkan versi untuk menggunakan ini. Saat ini versinya adalah 3.2.22 - person gourav sarswa; 18.10.2019
comment
Saya telah menambahkan kode baru dengan $in tetap, bisakah Anda mencobanya - person sushant mehta; 18.10.2019