Docs 菜单

Map 函数故障排除

在此页面上

注意

作为 Map-Reduce 替代方案的聚合管道

从 MongoDB 5.0 开始, map-reduce已弃用:

  • 您应该使用聚合管道,而不是 map-reduce。聚合管道提供比 map-reduce 更好的性能和可用性。

  • 您可以使用聚合管道阶段(例如 $group$merge 等)重写 map-reduce 操作。

  • 对于需要自定义功能的 map-reduce 操作,可以使用 $accumulator$function 聚合操作符。可以使用这些操作符在 JavaScript 中定义自定义聚合表达式。

有关 map-reduce 的聚合管道替代方案的示例,请参阅:

聚合管道也比 map-reduce 操作更容易排除故障。

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

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

考虑一个包含以下原型文档的collectionorders

{
_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 } ]
}
  1. 定义map函数,将每个文档的price映射到cust_id ,并发出cust_idprice对:

    var map = function() {
    emit(this.cust_id, this.price);
    };
  2. 定义emit函数以打印键和值:

    var emit = function(key, value) {
    print("emit");
    print("key: " + key + " value: " + tojson(value));
    }
  3. maporders使用collection中的单个文档调用 函数:

    var myDoc = db.orders.findOne( { _id: ObjectId("50a8240b927d5d8b5891743c") } );
    map.apply(myDoc);
  4. 验证键/值对是否符合您的预期。

    emit
    key: abc123 value:250
  5. maporders使用collection中的多个文档调用 函数:

    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();
    }
  6. 验证键和值对是否符合您的预期。

另请参阅:

map函数必须满足各种要求。 有关map函数的所有要求的列表,请参阅mapReducemongosh辅助方法db.collection.mapReduce()

在此页面上