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

MongoDBでグループ化してカウント

    これは単に書かれたようには機能しません。重要な問題はここにあります:key: {"ResultSet.Results.state": true}ResultSet.Results は配列です。 ResultSet.Results.stateを要求するとき ある種のforを暗示しています ここでループを実行します。 group コマンドは単にこれを行うことができません。

    代わりに、次のM/Rを試してください。

    map = function() {
      // Note that we emit once per result
      foreach(var i in ResultSet.Results) {
        key = this.ResultSet.Results[i];
        value = { count: 1, 
          quality: this.ResultSet.Results[i].quality,
          avg_quality: 0
        };
    
        emit(key, value);
      }
    }
    
    reduce = function(key, values) {
      // note that results has same fields as emitted value
      var results = { count: 0, quality: 0, avg_quality: 0 };
      foreach(var i in values){
        results.count += values[i].count;
        results.quality += values[i].quality;
        // ignore avg_quality, we don't use it
      }
      return results;
    }
    

    また、finalizeを作成する必要があります 平均的に。

    finalize = function(key, value) {
      if (value.count > 0)
        value.avg_quality = value.quality / value.count;
    
      return value;
    }
    


    1. MongoDBシェルで実行中のクエリを中止するにはどうすればよいですか?

    2. OverflowError:MongoDBは最大8バイトのintしか処理できませんか?

    3. モンゴのない流星

    4. mongodb-nodejsドライバーにフェッチされたすべてのファイルの合計を表示します