2011-11-12 57 views
4

我使用的NodeJS,貓鼬ODM和蒙戈的web應用程序和正在運行到問題的努力「按組」式的查詢中貓鼬運行:如何使用Mongoosejs通過查詢編寫組?

var results = mymodel.collection.group (
{ 
    keyf: 
     function(doc) 
     { 
       var m = doc.date.getMonth(); 
       var d = doc.date.getDate(); 
       var y = doc.date.getFullYear(); 
       return { date: m + "/" + d + "/" + y }; 
     }, 
    cond: {}, 
    reduce: function(doc,prev) { prev.total += doc.value; }, 
    initial: { total: 0 } 
} 
); 
if(results == null) 
{ 
    console.log("results is null\n"); 
} 

如果我運行「mymodel.collection。組「代碼在mongo shell中,它完美的工作。但是,在nodejs/mongoose中,即使mongoose文檔指出可以針對本地mongo驅動程序執行直接mongo代碼,它似乎仍會返回空結果。

沒有人有任何想法如何解決?

回答

1

我剛剛設法在Mongoose中做到這一點。要做到這一點,你需要創建一個鏈接的調用,並在回調中執行reduce。

var foo = function(name, callback){ 
Model.where('user', name). 
     select('points'). 
     run(callback); 
} 

所以上面是地圖,又減少是

foo(name, function(errors, docs){ 
       var score = 0; 
       for (var i=0; i < docs.length; i++){ 
        score += docs[i].points; 
       }); 

,在目前

+0

非常感謝!我會試試這個。 – iancormac

-1

我也有類似的問題,我需要工作,我可以用聚合框架做到這一點。

mymodel.collection.aggregate( { $match : CONDITION }, { $group : _id : { year : { $year : "$date"}, month : { $month : "$date"}, day : { $dayOfMonth : "$date"} }, count : { $sum : 1 } }, { $project : { date : { year : "$_id.year", month : "$_id.month", day : "$_id.day" } }, { $sort : { "date.year" : 1, "date.month" : 1, "date.day" : 1 } }, function(err, res) { ..callback function..} );

+0

請爲您的答案提供解釋。 – Spidy