0

新しい MongoDB 集計機能を使用して、日付ごとにいくつかの統計を集計しようとしています。以下は、私が使用しているドキュメント、試みたコード、および望ましい結果のサンプルです。集計関数は「未定義」を返します。誰かがそれがなぜなのか教えてもらえますか? 次に、集計関数で結果を mm-dd-yyyy 形式の日付でグループ化する必要があります。ただし、現在書かれているように、コードは完全な ISO 日付までに集計を実行すると思います。誰かがこれを修正する方法を教えてもらえますか?

ドキュメントの例

{
  user: "2A8761E4-C13A-470E-A759-91432D61B6AF-25982-0000352D853511AF",
  language: "English",
  imageFileName: "F7A5ED9-D43C-4671-A5C6-F06C7E41F902-7758-000008371FB5B834",
  audioFileName: "F6D5727D-9377-4092-A28A-AA900F02653D-7758-0000083749066CF2",
  date: ISODate("2012-10-22T02:43:52Z"),
  correct: "1",
  _id: ObjectId("5084b2e8179c41cc15000001")
}

集計関数

    var getUserStats = function(user, language, callback) {
    var guessCollection = db.collection('Guesses');
    guessCollection.aggregate(
  { $match: {
    user: user,
    language: language,
  }},
  { $sort: {
    date: 1
  }},
  { $project : {
     user : 1,
            language : 1,
            date : 1,
            correct : 1,
            incorrect : 1,
  } },
  { $unwind : "$language" },
  { $group : {
     _id : "$date",
            correct : { $sum : "$correct" },
            incorrect : { $sum : "$incorrect" }
  } }
, function(err, result){
    console.log(result);
    callback(result);
});

望ましい結果

  {
        "result" : [
    //...snip...
            {
                "_id" : "2A8761E4-C13A-470E-A759-91432D61B6AF-25982-0000352D853511AF",
                "correct" : 32,
                "incorrect" : 17,
                "date" : 2012-10-22
            },
{
                "_id" : "2A8761E4-C13A-470E-A759-91432D61B6AF-25982-0000352D853511AF",
                "correct" : 16,
                "incorrect" : 7,
                "date" : 2012-10-23
            }
        ],
        "Ok" : 1
    }
4

1 に答える 1

4

それが戻ることについてのあなたの最初の質問に関して、undefined2つの問題があります:

  1. 配列ではない$unwindフィールド()で演算子を使用しています。$language
  2. $sum文字列フィールド($correct)で演算子を使用しています。これは数値フィールドでのみサポートされています。

日付だけでのグループ化に関する2番目の質問では、グループ化する日付コンポーネントを予測してから、それらのコンポーネントを$groupオペレーターの_id値で使用する必要があります。

例えば:

test.aggregate(
    { $match: {
        user: user,
        language: language
    }},
    { $sort: {
        date: 1
    }},
    { $project : {
        user : 1,
        language : 1,
        year : { $year: '$date' },
        month : { $month: '$date' },
        day : { $dayOfMonth: '$date'},
        correct : 1,
        incorrect : 1
    }},
    { $group : {
        _id : { year: "$year", month: "$month", day: "$day" },
        correct : { $sum : "$correct" },
        incorrect : { $sum : "$incorrect" }
    }},
    function(err, result){
        console.log(result);
    }
);

次の出力を生成します。

[ { _id: { year: 2012, month: 10, day: 22 },
    correct: 0,
    incorrect: 0 } ]

'2012-10-22'そこからコードにアセンブルできます。

于 2012-10-23T22:31:37.050 に答える