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

Проектиране на масив от обекти към ключова стойност

Да, използвайки $arrayToObject и $map за да конвертирате съществуващия масив във формат, който приема:

db.collection.aggregate([
  { "$replaceRoot": {
    "newRoot": {
      "$arrayToObject": {
        "$concatArrays": [
          [{ "k": "date", "v": "$_id.date" }],  
          { "$map": {
            "input": "$aggr",
            "in": { "k": "$$this.gender", "v": "$$this.count" }
          }}
        ]
      }
    }    
  }}
])

Разбира се, ако това всъщност е само на „опашката“ на съществуващо агрегиране и нямате поне MongoDB 3.4.4, където е въведен операторът, тогава можете просто да преоформите резултата в клиентския код:

db.collection.aggregate([
  // existing pipeline
]).map(d => 
  Object.assign(
    { date: d._id.date },
    d.aggr.reduce((acc,curr) =>
      Object.assign(acc,{ [curr.gender]: curr.count }),{}
    )
  )
)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. повече от един 2dsphere индекс, не съм сигурен кой да стартирам geoNear

  2. Мигрирайте данни от PostgreSQL към MongoDB

  3. Ефективност при вмъкване в mongodb (pymongo)

  4. MongoDB търсене, когато чуждото поле е масив

  5. Локалният емулатор на Azure DocumentDB поддържа ли протокола mongodb?