翻译或纠错本页面
验证Map函数¶
map方法是用JavaScript编写的,它在 map-reduce 操作过程中可以映射并提交一个键值对。
如果要验证 map 函数提交的键值对(key-value pair),你可以编写一个自己的 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 函数,它把每个文档的 cust_id 和 price 字段映射为一个键值对,并提交这个键值对。
var map = function() { emit(this.cust_id, this.price); };
定义 emit 函数,它可以打印出前面的 map 函数提交的键内容和值内容。
var emit = function(key, value) { print("emit"); print("key: " + key + " value: " + tojson(value)); }
使用 map 函数处理 orders 集合中的一个文档:
var myDoc = db.orders.findOne( { _id: ObjectId("50a8240b927d5d8b5891743c") } ); map.apply(myDoc);
验证一下这个键值对是否是你所期望的。
emit key: abc123 value:250
使用 map 函数处理 orders 集合中的一组文档:
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(); }
验证一下这些键值对是否是你所期望的。
参见
map函数必须要满足几个条件,详细的列表可以查看 mapReduce,或者 mongo 命令行下的 db.collection.mapReduce() 。