Troubleshoot the Map Function
The map
function is a JavaScript function that associates or “maps”a value with a key and emits the key and value pair during amap-reduce operation.
Note
Starting in version 4.2.1, MongoDB deprecates the use of JavaScriptwith scope (i.e. BSON type 15) forthe map
, reduce
, and finalize
functions. To scopevariables, use the scope
parameter instead.
To verify the key
and value
pairs emitted by the map
function, write your own emit
function.
Consider a collection orders
that contains documents of thefollowing prototype:
- {
- _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 } ]
- }
- Define the
map
function that maps theprice
to thecust_id
for each document and emits thecust_id
andprice
pair:
- var map = function() {
- emit(this.cust_id, this.price);
- };
- Define the
emit
function to print the key and value:
- var emit = function(key, value) {
- print("emit");
- print("key: " + key + " value: " + tojson(value));
- }
- Invoke the
map
function with a single document from theorders
collection:
- var myDoc = db.orders.findOne( { _id: ObjectId("50a8240b927d5d8b5891743c") } );
- map.apply(myDoc);
- Verify the key and value pair is as you expected.
- emit
- key: abc123 value:250
- Invoke the
map
function with multiple documents from theorders
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();
- }
- Verify the key and value pairs are as you expected.
See also
The map
function must meet various requirements. For a list of allthe requirements for the map
function, see mapReduce
,or the mongo
shell helper methoddb.collection.mapReduce()
.