Ich freue mich, die ungelesenen Nachrichten in allen Konversationen zählen, wo ein Benutzer ein Mitglied der Konversation ist. Eine Nachricht wird von einem Benutzer gelesen, wenn sich die ID im Leser-Array befindet.Summe Subarray Länge
Folgendes gibt die Anzahl der Konversationen zurück, bei denen ungelesene Nachrichten vorhanden sind. Aber wie zählt man alle ungelesenen Nachrichten?
db.getCollection('conversations').count({
'messages.readers': { $size: 1 }, //i.e. only the message author is in the message.readers array.
'members': { $in: [ObjectId("59320e38188c5050ac99be8f")] }
})
Ich habe das Aggregat Methode überprüft, aber ich bin mir nicht sicher, ob es der richtige Ansatz ist. Folgendes gibt die Anzahl aller Nachrichten zurück.
db.getCollection('conversations').aggregate([
{$match : {
'members': { $in: [ObjectId("59320e38188c5050ac99be8f")] }
}},
{$group: {_id: null, count: {$sum: {$size: "$messages"}}}},
])
Mithilfe der Abfrage können Sie überprüfen, ob sich der Benutzer im Array 'members' und im Benutzer nicht im Array 'messages.readers' gefolgt von count befindet. Etwas wie 'db.getCollection ('Konversationen'). Count ({'Mitglieder': ObjectId (" 59320e38188c5050ac99be8f ")," messages.readers ": {$ ne: Objekt-ID (" 59320e38188c5050ac99be8f ")}})' – Veeram
Natürlich, aber das zählt die Anzahl der Gespräche und nicht die Anzahl der ungelesenen Nachrichten. – nFu9DT
Ich denke, ich habe diese Datenbank falsch konstruiert. – nFu9DT