2014-02-06 158 views
0

我看過很多代碼示例,但是我從來沒有找到想要的東西。其實我可以做一個循環,但我真的更喜歡使用mongo引擎來獲得我想要的結果。它更瘋狂,我開始花很多時間在它上面,看起來很基本...在mongoDB中的聚合

我正在使用Express和MongoDB運行nodeJS。

基本上我有一個集合中包含的一些信息:

{ 
    "aqi": 149, 
    "area": "AL", 
    "position_name": "montgomery", 
    "station_code": "1793A", 
}, 
{ 
    "aqi": 162, 
    "area": "AL", 
    "position_name": "huntsville", 
    "station_code": "1790A", 
}, 
{ 
    "aqi": 73, 
    "area": "TX", 
    "position_name": "dallas", 
    "station_code": "1792A", 
} 

我想獲得一個結果集像

{ 
    "_id": "AL", 
    "positions": [ 
    { 
     "position_name": "montgomery", 
     "station_code": "1793A" 
    }, 
    { 
     "position_name": "huntsville" 
     "station_code": "1790A" 
    } 
    ] 
}, 
{ 
    "_id": "TX", 
    "positions": [ 
    { 
     "position_name": "dallas", 
     "station_code": "1793A" 
    } 
    ] 
} 

到目前爲止,我真的覺得我沒查遍計算器,並嘗試幾個解決方案,同時,如果我錯了,並有類似問題的問題已經存在,請請讓我知道,我提前道歉。

我當前的代碼:

db.collection('cities', function(err, collection) { 
    collection.aggregate([{$group : {_id : "$area"}}], function(err, items) { 
    res.send(items); 
    }); 
}); 

我想混合匹配(區)和組,但沒有成功,直到如今。

謝謝您的幫助。

編輯:

我沒有忘記集團運營商做到這一點。在這裏,新的代碼:

db.collection('cities', function(err, collection) {  
    collection.aggregate([{$group : {_id: "$area", positions: {$push : "$position_name"}}}], function(err, items) { 
    res.send(items); 
    }); 
}); 

回答

0

我覺得你首先需要知道如何面對這個作爲一個aggregation pipeline,並獲得思考重要的事情就像是從一個shell命令到另一個管道的結果,這就是你正在聚合。

所以你開始了,但你需要更多的步驟。沒有勺子餵養,我只會說看看$push操作員,它應該指向你在正確的方向。

也嘗試花一些時間通過給出的操作符和教程示例。

http://docs.mongodb.org/manual/reference/operator/aggregation/

http://docs.mongodb.org/manual/tutorial/aggregation-zip-code-data-set/

+0

它實際上推......我只檢查有關管道運營商,忘了集團經營...感謝;) 我編輯我的問題的答覆。 – Atheryl