2017-05-11 8 views
0

Angenommen, wir haben 10 Sammlung, dann müssen wir die Zählung auf der Grundlage von tag_id finden. Wenn zum Beispiel tag_id 0 und 1 enthält, müssen wir alle Daten zählen sowie die Daten zählen, die nicht tag_id haben oder tag_id null ist. Wenn es dann ungelesen ist: false, dann kommt die Ausgabe, Zähle alle ungelesenen.So erhalten Sie Daten Mongo-Daten mit Aggregat MongoDB

Suchen Sie die Anzahl der Tag-ID und die Anzahl der ungelesenen, wenn falsch.

{ 
     "_id": ObjectId("5912c7240520df77f0c2c18a"), 
     "email_id": "54", 
     "unread": "false", 
     "__v": NumberLong(0), 
     "tag_id": ["0" 

     ] 
    }, { 
     "_id": ObjectId("5912c71e0520df77f0c2c189"), 
     "email_id": "55", 
     "unread": "false", 
     "__v": NumberLong(0), 
     "tag_id": [ 
      "1" 
     ] 
    }, { 
     "_id": ObjectId("5912c71d0520df77f0c2c186"), 
     "email_id": "51", 
     "unread": "false", 
     "__v": NumberLong(0), 
     "tag_id": [ 
      "2", "1" 
     ] 
    } 

erwartete Ergebnis:

{ 
    "data": [{ 
     "tag_id": "1", 
     "count_email": 1,(count of email on the basis of tag_id) 
     "unread": 9(count the unread on the basis of output of tag_id) 
    }, { 
     "tag_id": "3", 
     "count_email": 45, 
     "unread": 3 
    }, { 
     "tag_id": "2", 
     "count_email": 5, 
     "unread": 4 
    }, { 
     "id": null, 
     "count_email": 52, 
     "unread": 35 
    }] 
} 
+0

Dies ist nicht klar, erwartete Ausgabe entspricht nicht den von Ihnen bereitgestellten Beispieldokumenten. Können Sie die erwartete Ausgabe aktualisieren und einige Details dazu hinzufügen, was Sie erreichen möchten? – felix

+0

Mongo bietet Aggregationen, Map Reduce, etc ... aber diese Operationen in der Praxis skalieren nicht in einem Transaktionssystem. Wenn es um Analysen geht, dann gibt es dafür besser geeignete Datenspeicher als Mongo. – arboreal84

+0

danke. OK . wird sich darum kümmern –

Antwort

1

Sie unter Aggregation Pipeline nutzen können.

Die folgende Abfrage wird $unwind die tag_id von $group gefolgt email und $cond Betreiber zählen die unread E-Mail zu zählen.

db.collection.aggregate(
{$unwind:{path:"$tag_id", preserveNullAndEmptyArrays:true}}, 
{$group:{ 
    _id:"$tag_id", 
    count_email:{$sum:1}, 
    unread:{$sum:{$cond:[{$eq:["$unread", "false"]}, 0, 1]}} 
    } 
    } 
); 
+0

danke seine funktioniert für mich, ich möchte eine Sache mehr fragen, wenn ich tag_id "id": null oder nicht tag_id, ich will die Zählung für das { "id": null , "count_email": 52, "ungelesen": 35 } –

+1

Gern geschehen. Aktualisierte Antwort – Veeram

+0

es hilft mir sehr, danke. –

Verwandte Themen