sql >> Database teknologi >  >> NoSQL >> MongoDB

Pivot rækker til kolonner i MongoDB

Nu kan du bruge den nye aggregeringsoperator $arrayToObject til at dreje MongoDB-nøgler. Denne operatør er tilgængelig i MongoDB v3.4.4+

For eksempel givet et eksempel på data for:

db.foo.insert({ provider: "Facebook", timestamp: '1371798000000', name: 'page_storytellers', value: 20871})
db.foo.insert({ provider: "Facebook", timestamp: '1371798000000', name: 'page_fans', value: 1291509})
db.foo.insert({ provider: "Facebook", timestamp: '1371798000000', name: 'page_fan_adds', value: 2829})
db.foo.insert({ provider: "Google", timestamp: '1371798000000', name: 'page_fan_adds', value: 1000})

Du kan bruge Aggregation Pipeline nedenfor:

db.foo.aggregate([
  {$group:
     {_id:{provider:"$provider", timestamp:"$timestamp"}, 
      items:{$addToSet:{name:"$name",value:"$value"}}}
  }, 
  {$project:
     {tmp:{$arrayToObject: 
       {$zip:{inputs:["$items.name", "$items.value"]}}}}
  }, 
  {$addFields:
     {"tmp.provider":"$_id.provider", 
      "tmp.timestamp":"$_id.timestamp"}
  }, 
  {$replaceRoot:{newRoot:"$tmp"}
  }
]);

Outputtet ville være:

{
  "page_fan_adds": 1000,
  "provider": "Google",
  "timestamp": "1371798000000"
},
{
  "page_fan_adds": 2829,
  "page_fans": 1291509,
  "page_storytellers": 20871,
  "provider": "Facebook",
  "timestamp": "1371798000000"
}

Se også $group,$project,$addFields,$zip og $replaceRoot



  1. Find et dokument med ObjectID i mongoDB

  2. Hvordan søger du efter nøgler med en værdi? Få for eksempel alle NØGLER, hvor værdien er en eller anden værdi

  3. Hvordan laver man paginering ved hjælp af områdeforespørgsler i MongoDB?

  4. find() og findOne() metoderne i MongoDB viser forskellige resultater