MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Завъртане на редове към колони в MongoDB

Сега можете да използвате нов оператор за агрегиране $arrayToObject, за да завъртите ключовете на MongoDB. Този оператор е наличен в MongoDB v3.4.4+

Например, дадени са примерни данни за:

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})

Можете да използвате Aggregation Pipeline по-долу:

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"}
  }
]);

Резултатът ще бъде:

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

Вижте също $group,$project,$addFields,$zip и $replaceRoot



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Преглед на индексирането на база данни за MongoDB

  2. защо не мога да стартирам mongodb

  3. Защо посоката на индекса има значение в MongoDB?

  4. Как мога да комбинирам няколко колекции в една колекция, използвайки $lookup mongodb или nodejs mongodb?

  5. MongoDB индекс за различни типове