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

MongoDBは、集計を行うときに間違ったインデックスを選択しているようです

    に関するドキュメントを読むことをお勧めします$sort パフォーマンス

    また、これは「集約パイプライン」と呼ばれることに注意してください。 '理由があります。マッチング後にどこでソートするかは問題ではありません。したがって、解決策は非常に単純である必要があります:

    db.access_log.aggregate([
      {
           "$match": { 
              "visit_dt": {
                 "$gte": ISODate('2015-03-09'),
                 "$lt": ISODate('2015-03-11')
               },
               "file": {"$exists": true }
            } 
      },
      { "$sort": { "file": 1 } },
      { "$project": { "file": 1,  "_id": 0 } },
      { "$group": { "_id": "$file", "count": { "$sum": 1 } } },
      { "$sort": { "count": -1 } }
    ])
    

    ファイルフィールドがすべてのレコードに存在することが保証されている場合は、ファイルフィールドが存在するかどうかのチェックは不要な場合があります。フィールドにインデックスがあるので、これは害にはなりません。追加の並べ替えについても同じことが言えます。ファイルフィールドを含むドキュメントのみがパイプラインに入力されるようにしたため、インデックスを使用する必要があります。



    1. 配列内のmongoid更新要素

    2. アイテムを値mongodbで並べ替える

    3. 公式C#ドライバーを使用したMongoDBでのアップサーティング

    4. リアルタイムで追加されるRedisからオブジェクトをポップするにはどうすればよいですか?