1

私はプロジェクトに使用する必要があり、ドキュメントmapReduceに従い始めました。

このページの最初の例に従って、テストプロジェクトを作成しました。

testMongoという名前のデータベースを作成し、例のオブジェクトをコレクションに挿入しましたcol_one

{
     _id: ObjectId("50a8240b927d5d8b5891743c"),
     cust_id: "abc123",
     ord_date: new Date("Oct 04, 2012"),
     status: 'A',
     price: 250,
     items: [ { sku: "mmm", qty: 5, price: 2.5 },
              { sku: "nnn", qty: 5, price: 2.5 } ]
}

私のコードは単純です(例のように):

// MongoDB part
// Create server

var mapFunction1 = function() {
   emit(this.cust_id, this.price);
};

var reduceFunction1 = function(keyCustId, valuesPrices) {
   return Array.sum(valuesPrices);
};

collection.mapReduce(
   mapFunction1,
   reduceFunction1,
   { out: "col_two" }
);

// Print items from col_two

これはこのエラーをスローします:

.../node_modules/mongodb/lib/mongodb/connection/server.js:524
        throw err;
              ^ TypeError: undefined is not a function

これに変更すると、このエラーは消えます。

collection.mapReduce(
   mapFunction1,
   reduceFunction1,
   { out: "col_two" },
   function() {
       // Print items from col_two
   }
);

エラーが消えるのはなぜですか?

4

1 に答える 1

3

ヒットしているのは、シェルで使用される API とネイティブの node.js ドライバーの主な違いの 1 つです。シェルは同期ですが、node.js ドライバーは非同期です。

node.js ドライバーは非同期であるため、ドキュメントmapReduceに示されているように、呼び出しにコールバック パラメーターを指定して、結果を受け取ることができるようにする必要があります。

于 2013-02-06T18:13:23.863 に答える