2013-04-22 147 views
1

我想要使用Nodejs,mongoose和MongoDB來減少地圖操作。 我有一個相當平坦的模式結構,我想獲得每個'named'對象的值/日期對列表。地圖縮小功能顯然有些問題,但我看不到如何修復它以獲取我之後的格式。使用mongoosejs縮小地圖

MongoDB的文檔架構如下:

{ "name" : "object1", "value" : "123", "date" : "2013-01-02 01:00:00" } 
{ "name" : "object1", "value" : "456", "date" : "2013-01-02 02:00:00" } 
{ "name" : "object2", "value" : "123", "date" : "2013-01-02 02:00:00" } 

的地圖上減少我用我的貓鼬架構功能如下:

var o = {}; 
o.map = function() { 
    emit(
    { 'name': this.name }, 
    {'data': [ { 'value': this.value, 'date': this.date} ] } 
) 
} 

o.reduce = function (k, vals) { 
    var reduced = {'data': []}; 
    for (var i in vals) { 
    reduced.data.push(vals[i]); 
    } 
    return reduced; 
} 

this.mapReduce(o, function(err, model) { 
    if(err) console.log(err); 
    model.find().exec(cb); 
}); 

我想看到的是一些JSON沿線

[ 
    { 
    "name": "object1", 
    "data": [ 
     { 
     "value": "123", 
     "date": "2013-01-02T01:00:00.123456" 
     }, 
     { 
     "value": "456", 
     "date": "2013-01-02T02:00:00.123456" 
     }, 
    ] 
    }, 
    { 
    "name": "object2", 
    "data": [ 
     { 
     "value": "123", 
     "date": "2013-04-22T13:10:03.893018" 
     }, 
     ... 
    ] 
    }, 
    ... 

但我最終得到了這個嵌套的混亂!有人能給我一個指針,指出我錯過了什麼!

[ 
    { 
    "_id": { 
     "name": "object1" 
    }, 
    "value": { 
     "data": [ 
     { 
      "data": [ 
      { 
       "data": [ 
       { 
        "data": [ 
        { 
         "value": "123", 
         "date": "2013-01-02T02:00:00.123456" 
        } 
        ] 
       }, 
       { 
        "data": [ 
        { 
         "value": "465", 
         "date": "2013-01-02T01:00:00.123456" 
        } 
        ] 
       }, 
       ... etc 

回答

0

嘗試類似的東西:(未經測試,但這個想法是在這裏,我想:))

var o = {}; 
o.map = function() { 
    emit(this.name, { 'value': this.value, 'date': this.date}) 
} 

o.reduce = function (k, vals) { 
    var reduced = {name: k, data : []}; 
    for (var i in vals) { 
    reduced.data.push(vals[i]); 
    } 
    return reduced; 

    // or just return vals? it's already the array you want. 
} 
+0

呀,那八九不離十讓我有,但我最終的可怕嵌套了同樣的問題數據陣列如上:( – Reviloc 2013-04-22 21:20:58

+0

_id是關鍵是正常的,你是否試過只返回vals? – Niels 2013-04-22 21:37:39