sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの$matchで集計演算子を使用するにはどうすればよいですか(たとえば、$yearや$dayOfMonth)?

    すでに見つけたように、ドキュメントにないフィールドで$ matchを実行することはできず(検索とまったく同じように機能します)、最初に$ projectを使用すると、インデックスを使用できなくなります。

    代わりにできることは、次のように努力を組み合わせることです。

    {
        aggregate: 'posts',
        pipeline: [
             {$match: {
                 created_date : 
                      {$gte:{$date:'2012-09-01T04:00:00Z'}, 
                      $lt:  {date:'2012-10-01T04:00:00Z'} 
                      }}
                 }
             },
             {$group:
                 {_id: '0',
                  totalComments:{$sum:'$comments'}
                 }
              }
        ]
     }
    

    上記は9月の集計のみを示しています。複数の月を集計する場合は、次のようになります。

    {
        aggregate: 'posts',
        pipeline: [
             {$match: {
                 created_date : 
                      { $gte:'2012-07-01T04:00:00Z', 
                        $lt: '2012-10-01T04:00:00Z'
                      }
             },
             {$project: {
                  comments: 1,
                  new_created: {
                            "yr" : {"$year" : "$created_date"},
                            "mo" : {"$month" : "$created_date"}
                         }
                  }
             },
             {$group:
                 {_id: "$new_created",
                  totalComments:{$sum:'$comments'}
                 }
              }
        ]
     }
    

    次のようなものが返されます:

    {
        "result" : [
            {
                "_id" : {
                    "yr" : 2012,
                    "mo" : 7
                },
                "totalComments" : 5
            },
            {
                "_id" : {
                    "yr" : 2012,
                    "mo" : 8
                },
                "totalComments" : 19
            },
            {
                "_id" : {
                    "yr" : 2012,
                    "mo" : 9
                },
                "totalComments" : 21
            }
        ],
        "ok" : 1
    }
    


    1. monogdbのエラーerrmsg:WiredTigerIndex ::insert:キーが大きすぎてインデックスに登録できず、失敗します

    2. RubyとMongoIdでタイムゾーンを正しく保存するにはどうすればよいですか?

    3. 正しいデータベースを指すようにAccounts-Baseパッケージを取得できません

    4. Ember-dataとMongoDB、_idの処理方法