0

node-mongodb-native を使用した map/reduce メソッドがあります。「product_id」で個別のレコードのみを返そうとしています。これは私がこれまでに持っているものです:

        var map = function() {
            emit("_id", {"_id" : this._id, 
                         "product_id" : this.product_id,
                         "name" : this.name 
                         });
        }

        var reduce = function(key, values) {

            var items  = [];
            var exists;

            values.forEach(function(value) {

                if(items.length > 0) {

                    items.forEach(function(item_val, key) {
                        if(item_val.product_id == value.product_id) {
                            exists = true;
                        }
                    });

                    if(!exists) {
                        items.push(value);
                    }

                    exists = false;

                } else {

                    items.push(value);
                }
            }); 

            return {"items" : items};
        }

        this.collection.mapReduce(map, reduce, {out : {inline: 1}, limit: 4}, function(err, results) {
            if (err) {
                console.log(err);
            } else {
                console.log(results[0].value.items);
            }
        });

私の論理では何かがうまくいかないようです。product_id が同じ重複レコードを追加します。

どんな助けでも素晴らしいでしょう - ありがとう!

4

1 に答える 1

2

実際、あなたがやろうとしていることの例:

var map = function() {
    emit(this.product_id, {"_id" : this._id, "name" : this.name });
}

var finailise = function(key, value){
    return value[0]; // This might need tweaking, ain't done MRs in a while :/
}

ただし、次の2つのタイプがあることに注意してください。

  • 最初に見つける
  • 最後の検索

区別するための標準的な方法はなく、各DBには独自のメソッドがあり、SQLデータベース全体でも標準ではないため、区別する方法を知るのはあなた次第です。上記のものは、最初に明確なものを見つけます。次のような明確な最後の検索を行うことができます。

var finailise = function(key, value){
    return value[value.length-1]; 
}

または同様の何か、とにかく始める必要があります。

それが役に立てば幸い、

于 2012-08-13T20:39:44.100 に答える