sql >> Databasteknik >  >> NoSQL >> MongoDB

Kapslad gruppering med MongoDB

Något sådant här borde göra det;

db.example.aggregate( 
  { 
    $group: { 
      _id:   { age: "$age", gender: "$gender" }, 
      names: { $addToSet: "$name" } 
    } 
  }, 
  { 
    $group: {
      _id: { age: "$_id.age" }, 
      children: { $addToSet: { gender: "$_id.gender", names:"$names" } } 
    } 
  } 
)

...vilket ger resultatet;

{
  "_id" : {
    "age" : 1
  },
  "children" : [
    { "gender" : "m", "names" : [ "G", "A" ] },
    { "gender" : "f", "names" : [ "J", "D" ] }
  ]
}, 
...

Om du vill ha åldern som _id som i ditt exempel, ersätt bara den andra grupperingens _id av;

_id: "$_id.age", 



  1. MongoDB:Hur man hittar ett dokument med ett id inuti ett kapslat dokument

  2. Inkludera fält i mongodb-aggregat

  3. Konvertera datum från millisekunder till ISODate-objekt

  4. Finns det ett sätt att automatiskt upptäcka ny klusternod IP i Redis Cluster med sallad