MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie zähle ich das Auftreten jedes Werts im Array?

Sie haben die geschweiften Klammern auf der key vergessen Wert und Sie müssen diese Zeile mit einem , abschließen anstelle eines ; .

db.issues.group({
    key: {"comments.username":true},
    initial: {sum:0},
    reduce: function(doc, prev) {prev.sum +=1},
});

AKTUALISIEREN

Nach der Realisierung von comments ist ein Array ... Sie müssten aggregate verwenden dafür, damit Sie comments "abspulen" können und gruppieren Sie dann darauf:

db.issues.aggregate(
    {$unwind: '$comments'},
    {$group: {_id: '$comments.username', sum: {$sum: 1}}}
);

Für das Beispieldokument in der Frage wird Folgendes ausgegeben:

{
  "result": [
    {
      "_id": "Brandon Black",
      "sum": 1
    },
    {
      "_id": "Nelson Elhage",
      "sum": 3
    }
  ],
  "ok": 1
}