私はnodejs、mongoose odm、およびmongoをWebアプリケーション用に使用しており、mongooseで
“group by”スタイルのクエリを実行しようとする問題にぶつかっています。
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 nulln");
}
mongoシェルで
“mymodel.collection.group”コードを実行すると、完全に動作します。しかし、nodejs/mongooseでは、mongooseドキュメンテーションは、直接のmongoコードがネイティブmongoドライバに対して実行可能であると述べていますが、null結果を返すようです。
誰にどのように解決する方法がありますか?
ベストアンサー
私はちょうどそれを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;
});
それは私のニーズのために今働いています