调试 Map 函数
在本页
注意
聚合管道作为 Map-Reduce 的替代方案
从 MongoDB 5.0 开始,map-reduce 已弃用
而不是使用 map-reduce,您应使用 聚合管道。聚合管道比 map-reduce 提供更好的性能和可用性。
对于需要自定义功能的 map-reduce 操作,您可以使用
$accumulator
和$function
聚合运算符。您可以使用这些运算符在 JavaScript 中定义自定义聚合表达式。
有关聚合管道替代 map-reduce 的示例,请参阅
聚合管道比 map-reduce 操作更容易调试。
map
函数是一个 JavaScript 函数,在 map-reduce 操作期间将值与键关联或“映射”,并发出键值对。
验证键值对
为了验证由map
函数发出的key
和value
对,请编写自己的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 } ] }
定义一个将
price
映射到每个文档的cust_id
的map
函数,并发出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(); } 验证键值对是否符合您的预期。