英文原文地址:https://docs.mongodb.com/v3.2/tutorial/troubleshoot-map-function/。
本文章属个人翻译,作个人学习之用,如有雷同,纯属巧合。如有错误之处,欢迎指正。
调试Map函数
map函数是在map-reduce操作期间,把值与键关联起来,并产生键-值对的一个javascript函数。
要验证map函数产生的键-值对,可以编写你自己的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函数,对每个文档,把price映射到cust_id,并产生cust_id-price对:
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(); }
验证键-值对是否符合你的预期。