1

mongodb でカンマ区切りの値を含むフィールドを分割し、フィールド内の値をカウントするには、mapreduce が必要です。

4

1 に答える 1

1

以下に示すサンプル文書を作成しました。

{ "_id" : ObjectId("5060017f6fd0f104e16540a2"), "field" : "1,2,3,4,5" }
{ "_id" : ObjectId("506001866fd0f104e16540a3"), "field" : "1,2,3" }
{ "_id" : ObjectId("5060018e6fd0f104e16540a4"), "field" : "1,2,3,7,8,9,0,4,3" }
{ "_id" : ObjectId("506001926fd0f104e16540a5"), "field" : "1" }
{ "_id" : ObjectId("506001966fd0f104e16540a6"), "field" : "1,5" }

次に、次の map/reduce クエリを実行して、目的を達成できます。

map = function() {
    var array = this.field.split(',');
    emit(this.field, array.length);
}

reduce = function(key, values) {
    return values;
}

result = db.runCommand({
        "mapreduce" : "comma", 
        "map" : map,
        "reduce" : reduce,
        "out" : "comma_result"
});

結果は次のとおりです。

> db.comma_result.find();
{ "_id" : "1", "value" : 1 }
{ "_id" : "1,2,3", "value" : 3 }
{ "_id" : "1,2,3,4,5", "value" : 5 }
{ "_id" : "1,2,3,7,8,9,0,4,3", "value" : 9 }
{ "_id" : "1,5", "value" : 2 }
于 2012-09-24T06:49:40.637 に答える