2016-12-26 86 views
0

的MongoDB返回以下JSON數組時,我們取從集合「公司章程」的數據格式化MongoDB的結果

[{ 
    "_id": "id1", 
    "description": "Description for article", 
    "author": "publisher of article" 
}, { 
    "_id": "id2", 
    "description": "Description for article", 
    "author": "publisher of article" 
}, { 
    "_id": "id3", 
    "description": "Description for article", 
    "author": "publisher of article" 
}] 

但是我想JSON在以下格式

[{ 
    "id1": { 
     "_id": "id1", 
     "description": "Description for article", 
     "author": "publisher of article" 
    }, 
    "id2": { 
     "_id": "id2", 
     "description": "Description for article", 
     "author": "publisher of article" 
    }, 
    "id3": { 
     "_id": "id3", 
     "description": "Description for article", 
     "author": "publisher of article" 
    } 
}] 

是否有可能用獲得這樣的結果MongoDB查詢?

+0

你爲什麼要這樣格式化? – ZippyV

+0

爲了通過指定鍵直接獲取結果,而不是通過JSON循環 –

回答

0

你可以用map reduce做到這一點:

  • 地圖功能:

    var mapFunction = function() { 
        var obj = {}; 
    
        obj[this._id] = { 
    
         "_id": this._id, 
         "description": this.description, 
         "author": this.author 
    
        }; 
        emit(1,obj); 
    }; 
    
  • 減少功能:

    var reduceFunction = function(key, values) { 
    
        var reduced = {}; 
    
        var output_arr = []; 
    
        values.forEach(function(value) { 
         Object.keys(value).forEach(function(key) { 
          var obj = {}; 
          obj[key]=value[key]; 
          output_arr.push(obj); 
         }); 
        }); 
    
        reduced["data"] = output_arr; 
    
        return reduced; 
    
    }; 
    

地圖查詢降低:

db.items.mapReduce(mapFunction, reduceFunction, { out: { inline: 1 } }) 

您可以訪問results[0].value.data中的結果。輸出是:

{ 
    "results" : [ 
     { 
      "_id" : 1, 
      "value" : { 
       "data" : [ 
        { 
         "id1" : { 
          "_id" : "id1", 
          "description" : "Description for article", 
          "author" : "publisher of article" 
         } 
        }, 
        { 
         "id2" : { 
          "_id" : "id2", 
          "description" : "Description for article", 
          "author" : "publisher of article" 
         } 
        }, 
        { 
         "id3" : { 
          "_id" : "id3", 
          "description" : "Description for article", 
          "author" : "publisher of article" 
         } 
        } 
       ] 
      } 
     } 
    ], 
    "timeMillis" : 11, 
    "counts" : { 
     "input" : 3, 
     "emit" : 3, 
     "reduce" : 1, 
     "output" : 1 
    }, 
    "ok" : 1 
} 
+0

這可以使用聚合或項目來完成,因爲當我運行它來獲取大量記錄時,此查詢花費大量時間 –

+0

現在不mongo 3.4)也許在將來的版本中可以看到https://jira.mongodb.org/plugins/servlet/mobile#issue/SERVER-5947 –