进入MongoDB中文手册(4.2版本)目录
map函数是JavaScript函数,可将关联或“映射”一个值与一个键,并在map-reduce操作期间发出键值对 。
注意
在4.2.1版本开始,MongoDB的不赞成map,reduce和finalize函数使用scope(即使用JavaScript的BSON类型15)。要限制变量的范围,请改用scope参数。
要验证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 } ]
}
- 定义将每个文档的price映射到cust_id并发出cust_id和price对的map函数:
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 myCursor = db.orders.find( { cust_id: "abc123" } );
while (myCursor.hasNext()) {
var doc = myCursor.next();
print ("document _id= " + tojson(doc._id));
map.apply(doc);
print();
}
- 验证键和值对是否符合预期。
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();
}
- 验证键和值对是否符合预期。
也可以看看
- map函数必须满足各种要求。有关该map功能的所有要求的列表,请参见mapReduce或mongo shell帮助器方法db.collection.mapReduce()。