翻译或纠错本页面

验证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 } ]
}
  1. 定义 map 函数,它把每个文档的 cust_idprice 字段映射为一个键值对,并提交这个键值对。

    var map = function() {
        emit(this.cust_id, this.price);
    };
    
  2. 定义 emit 函数,它可以打印出前面的 map 函数提交的键内容和值内容。

    var emit = function(key, value) {
        print("emit");
        print("key: " + key + "  value: " + tojson(value));
    }
    
  3. 使用 map 函数处理 orders 集合中的一个文档:

    var myDoc = db.orders.findOne( { _id: ObjectId("50a8240b927d5d8b5891743c") } );
    map.apply(myDoc);
    
  4. 验证一下这个键值对是否是你所期望的。

    emit
    key: abc123 value:250
    
  5. 使用 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();
    }
    
  6. 验证一下这些键值对是否是你所期望的。

参见

map函数必须要满足几个条件,详细的列表可以查看 mapReduce,或者 mongo 命令行下的 db.collection.mapReduce()