对 Map 功能进行故障排除

map函数是一个 JavaScript 函数,该函数将值与键关联或“Map”,并在map-reduce操作期间发出键和值对。

要验证map函数发出的keyvalue对,请编写您自己的emit函数。

考虑一个包含以下原型文档的集合orders

{
     _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 } ]
}
  • 定义map函数,该函数将每个文档的priceMap 到cust_id并发出cust_idprice对:
var map = function() {
    emit(this.cust_id, this.price);
};
  • 定义emit函数以打印键和值:
var emit = function(key, value) {
    print("emit");
    print("key: " + key + "  value: " + tojson(value));
}
  • 使用orders集合中的单个文档调用map函数:
var myDoc = db.orders.findOne( { _id: ObjectId("50a8240b927d5d8b5891743c") } );
map.apply(myDoc);
  • 验证键和值对是否符合您的预期。
emit
key: abc123 value:250
  • 使用orders集合中的多个文档调用map函数:
var myCursor = db.orders.find( { cust_id: "abc123" } );

while (myCursor.hasNext()) {
    var doc = myCursor.next();
    print ("document _id= " + tojson(doc._id));
    map.apply(doc);
    print();
}
  • 验证键和值对是否符合您的预期。

See also

map函数必须满足各种要求。有关map函数的所有要求的列表,请参见mapReducemongo shell 帮助器方法db.collection.mapReduce()