Mongoosejsを使ってクエリでグループを書く方法は?

私は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 null\n");
}

mongoシェルで "mymodel.collection.group"コードを実行すると、完全に動作します。しかし、nodejs/mongooseでは、mongooseドキュメンテーションは、直接のmongoコードがネイティブmongoドライバに対して実行可能であると述べていますが、null結果を返すようです。

誰にどのように解決する方法がありますか?

4

2 答え

私はちょうどそれを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;
                });

それは私のニーズのために今働いています

1
追加された
本当にありがとう!私はこれを試してみる。
追加された 著者 iancormac,

同様の問題があり、集約フレームワークでこれを行うことができました。

mymodel.collection.aggregate(     {$ match:CONDITION}、     {$ group:_id:{                         年:{$ year: "$ date"}、                         月:{$ month: "$ date"}、                         日:{$ dayOfMonth: "$ date"}                 }、                 カウント : {                         $ sum:1                 }     }、     {$ project:{                     日付:{                         年: "$ _id.year"、                         月: "$ _id.month"、                         日: "$ _id.day"                     }     }、     {$ sort:{             "date.year":1、             "date.month":1、             "date.day":1             }     }、     関数(err、res){..コールバック関数} );

1
追加された
あなたの答えの説明を記入してください。
追加された 著者 Spidy,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript