incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrea Di Mario <anddima...@gmail.com>
Subject Doubt on map/reduce and "joins" by id
Date Mon, 15 Oct 2012 15:40:49 GMT
Hi, i'm a new CouchDB user and i'm working on this documents:

- Customer: {    customerID,     customerName,   address,   branch,
 branchID}
- Product: {  productID,    productName,     category_1ID,
category_1Name,    ...
    category_xID,    category_xName,    priceStandard}
- Orders: {    orderID,    orderRowNumber,    customerID,
productID,    price,    quantity,    date}

Now, i must get some statistics based on customerID, and i wrote this
map/reduce functions:
function(doc) {
  if (doc.type == "customer") {
    emit(doc._id, doc);
  } else if (doc.type == "order") {
    emit(doc.customer_id, doc);
  }
}
function (keys, values, re) {
	var numProducts = 0,
	numOrders = 0,
	totalValue = 0,
	customerName, branch, branchID;
	for (var item in values) {
		if (values[item].type === "customer") {
			branchID = values[item].branch_id;
			branch = values[item].branch;
			customerName = values[item].customer_name;
		}
		if (values[item].type === "order") {
			totalValue += (values[item].price * values[item].quantity);
			numOrders += 1;	
			if (values[item].product_id) {
				numProducts += 1;
			}
		}
	}
	var results = {customerID: keys[0][0], customerName: customerName,
branchID: branchID, branch: branch, numProducts: numProducts,
numOrders: numOrders, totalValue: totalValue};
	return results;
}
I must get the category count for each productID and return with the
other results of the view, so i should do a "Join" based on productID
from Order and Product. I saw some example online, but i'm confused
because i can't use my function with customerID and i can't retrieve
the results.

Could someone give me some suggestions about that?

Thanks for your time.
Best regards.

-- 
Andrea Di Mario
LinkedIn: http://www.linkedin.com/in/andreadimario

Mime
View raw message