2017-04-17 4 views
1

Dies ist mein erster Beitrag hier und sucht wirklich eine Hilfe.MongoDB-Aggregat und -Gruppe für verschiedene Schlüsselnamen

Ich ging zu finden MongoDB aggregate result with two different keys , aber die Zuverlässigkeit der gleichen konnte nicht erhalten werden. Oder besser gesagt, ich konnte die Lösung nicht erfüllen

Das Problem ist, ich habe eine Sammlung, in der Dokumente verschiedene Schlüssel haben. Basierend auf diesem Schlüssel würden die resultierenden Daten als ein Array von Objekten erhalten werden. Dies ist eine Auflistung Struktur

{ 
"_id" : ObjectId("58ec840e2573065a1e076db3"), 
"uniqueid" : "24050951", 
"productid" : "5149-1550DM-11", 
"record_id" : 1 
} 

{ 
"_id" : ObjectId("58ec840e2573065a1e076db4"), 
"task" : 1, 
"record_id" : 1, 
"judgement" : { 
    "2" : "Functional" 
} 
} 


{ 
"_id" : ObjectId("58ec840e2573065a1e076db5"), 
"qc" : 1, 
"record_id" : 1, 
"judgement" : { 
    "2" : "No Style" 
} 
} 

{ 
"_id" : ObjectId("58ec840e2573065a1e076db6"), 
"task" : 2, 
"record_id" : 1, 
"judgement" : { 
    "2" : "Functional" 
} 
} 

{ 
"_id" : ObjectId("58ec840e2573065a1e076db6"), 
"task" : 2, 
"record_id" : 2, 
"judgement" : { 
    "2" : "Functional" 
} 
} 

Der Ausgang ich erwarte ein Objekt von drei Arrays ist

"task"-> Array(3)-> contains three records for record_id 1 and 2 and also one more for task 1 and 2 for record_id 1 
"qc" -> Array(1) 
"other" -> if the task or qc doesnot exist. 

Es ist leicht einzusehen, dass als Mongo Funktion zu holen, wo Sie Javascript-Code schreiben. Aber mit Aggregat ist es etwas komplexer, soweit es mich betrifft. Jede mögliche Hilfe

Dank

+0

Dies ist keine Aggregation dann ... –

+0

Was ist Ihre mongodb Server-Version? – Veeram

+0

@Veuram mit 3.4 – Neo

Antwort

0

Sie können versuchen, $facet mit $match Anwesenheitskontrolle ($exist) von Feldern .

db.collection.aggregate([ 
    { 
    $facet: { 
     "task": [ 
      { $match: { task: { $exists: 1 } } } 
     ], 
     "qc": [ 
      { $match: { qc: { $exists: 1 } } }, 
     ], 
     "other": [ 
      { $match: {task: { $exists: 0 } , qc: { $exists: 0 } } }, 
     ] 
    } 
    } 
]) 
+0

Danke Mann..das hat es getan .. Müssen wissen, was $ Facette ist – Neo

0

hier gehen Sie geschätzt!

db.data.aggregate([ 
    {$group:{_id:null, task:{$push:"$task"}, qc:{$push:"$qc"}, other:{$pushAll:['$record_id','$judgement']} }} 
]) 

HINWEIS: Um alle anderen Bereiche als Aufgabe zu bekommen und diese Schlüssel in dem anderen $ pushAll Array qc setzen als

angezeigt
+0

@nurulnabi ... Entschuldigung Bruder Es hat nicht wie erwartet funktioniert. Danke für die Antwort obwohl – Neo

+0

können Sie sagen, was ist die Ausgabe der oben genannten Abfrage und was sollte sein? Ich meine, ich verstehe nicht, wo das Problem liegt. Kann ich korrigieren? – nurulnabi

Verwandte Themen