2017-12-07 3 views
0

ich die Sammlung mit Dokumentstruktur wie dieses:MongoDB Dokumente Kombination

{ 
"_id" : "Host CPU Utilization (%)", 
"count" : 1, 
"avg" : NumberDecimal("20.2397439956"), 
"flaga" : 4 
}, 
{ 
"_id" : "Active Sessions Using CPU", 
"count" : 1, 
"avg" : NumberDecimal("4.0580000000"), 
"flaga" : 4 
}, 
{ 
"_id" : "Wait Time (%)", 
"count" : 1, 
"avg" : NumberDecimal("1795.2150000000"), 
"flaga" : 999 
} 

Ist das möglich wie pymongo Ändern von Daten zu verwenden:

{ 
"_id" : 4, 
"Host CPU Utilization (%)" : NumberDecimal("20.2397439956"), 
"Active Sessions Using CPU" : NumberDecimal("4.0580000000") 
}, 
{ 
"_id" : 999, 
"Wait Time (%)" : NumberDecimal("1795.2150000000"), 
} 

ich versucht habe Update zu verwenden, empfehlen rename kann aber t tun es dynamisch und können zwei Dokumente nicht zu einem kombinieren. Wenn ich Aggregation Framework verwende, kann ich nicht $put Dokumente mit variablen Feldnamen.

Antwort

0

Seit Version 3.4 haben wir $arrayToObject Operator, der hilfreich sein könnte. Sie können versuchen, die Gruppierung durch flaga Feld und dann mit dem erwähnten Operator.

db.myCollection.aggregate([ 
    { 
     $group: { 
      "_id": "$flaga", 
      "values": { 
       "$push": { 
        "k": "$_id", 
        "v": "$avg" 
       } 
      } 
     } 
    }, 
    { 
     $project: { 
      "_id": 1, 
      "values": { $arrayToObject: "$values" } 
     } 
    } 
]) 

Dies wird Ihnen Ergebnisse wie geben:

{ 
    "_id":4, 
    "values":{ 
     "Host CPU Utilization (%)":NumberDecimal("20.2397439956"), 
     "Active Sessions Using CPU":NumberDecimal("4.0580000000") 
    } 
} 

Sie nächste Pipeline-Stufe mit $replaceRoot hinzufügen können, um dieser Verschachtelung loszuwerden, aber leider werden Sie _id Feld lösen und ich wette, es Sie nicht, was suchen, sollten Sie diese Nachbearbeitung in Ihrem Geschäftslogikcode durchführen.

Verwandte Themen