1

我必须使用mapReduce一个项目,我开始遵循文档

我按照页面中的第一个示例创建了一个测试项目。

我创建了一个名为testMongo 的数据库,并将示例中的对象插入到 collection 中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

您遇到的问题是 shell 中使用的 API 与本机 node.js 驱动程序之间的主要区别之一:shell 是同步的,而 node.js 驱动程序是异步的。

由于 node.js 驱动程序是异步的,因此您必须按照文档mapReduce中的说明为调用提供回调参数,以便您可以接收结果。

于 2013-02-06T18:13:23.863 回答