Mongodb 如何获取未读计数

Mongodb 如何获取未读计数,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我创建了我的消息架构,如下所示:- { _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]},

我创建了我的消息架构,如下所示:-

{ 
_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();
现在,我可以获取每个对话的最后一条消息,但无法获取未读消息的计数。我使用的是以下内容:-

{ 
_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();

但是这个查询返回null。请提供帮助。

将$project read值替换为以下值:

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


这在我的情况下有效。

它给出了错误。MongoError:无效的运算符“$indexOfArray”。我想我需要升级版本才能使用它。现在的版本是3.2.22。我已经添加了带有固定$in的新代码,你能试试吗