I've got a simple parent child object stored as a document in MongoDB. Something simplistic like Order/OrderItems. (Order has an array of OrderItem)

What I'd like to do is query for a count of Order Items where they meet a set of criteria.

Example: In Order "999" find out how many order items had a quantity of 3.

db.collection.find( {OrderId:999, "OrderItems.QuantityOrdered":3} ).count();

The way this query works is it returns "1" because if it matches at least one OrderItem inside the array it will return the count of Orders matched.

How can I query for how many "OrderItems" matched?:

link|flag
Seems to work for me. Unless I have the structure incorrectly. > db.posts.find() { "_id" : ObjectId("4c2e2c7bd39925311b1edae7"), "orderid" : 1, "orderitems" : { "quantityordered" : 3 } } { "_id" : ObjectId("4c2e2c8ad39925311b1edae8"), "orderid" : 1, "orderitems" : { "quantityordered" : 2 } } { "_id" : ObjectId("4c2e2c93d39925311b1edae9"), "orderid" : 1, "orderitems" : { "quantityordered" : 3 } } > – luckytaxi Jul 2 at 18:17

1 Answer

There's no direct way of return this sort of count with an embedded document. With this sort of ad-hoc count, your best bet is to return the document and do the count from the application.

If you want to perform this kind of count for a large number of orders, you could use map-reduce, which will output the results to a new collection.

link|flag

Your Answer

 
or
never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.