2010-07-02 78 views
3

我有一个简单的父子对象作为文档存储在MongoDB中。像Order/OrderItems这样简单的东西。 (订单有一个OrderItem数组)MongoDB:匹配嵌套数组元素的数量

我想要做的是查询订单项的计数,他们符合一组标准。

例子:为了“999”找到了许多订单项目怎么过的3

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

量此查询的工作原理是,它返回“1”,因为如果至少一个OrderItem的内部匹配的方式该数组将返回匹配Orders的数量。

我如何可以查询多少“的OrderItems”匹配?:

+0

似乎为我工作。除非我的结构不正确。 (“_id”:ObjectId(“4c2e2c7bd39925311b1edae7”),“orderid”:1,“orderitems”:{“quantityordered”:3}} {“_id”:ObjectId(“ “orderid”:1,“orderitems”:{“quantityordered”:2}} {“_id”:ObjectId(“4c2e2c93d39925311b1edae9”),“orderid”:1,“orderitems”:{“quantityordered” 3}} > – luckytaxi 2010-07-02 18:17:23

回答

3

有回报的这种计数与嵌入式文件没有直接的方法。通过这种临时计数,您最好的选择是退回文档并从应用程序中进行计数。

如果您想对大量订单执行此类计数,您可以使用map-reduce,它会将结果输出到新的集合中。

+0

我同意。但是,如果您经常需要这类数据,最受欢迎的方法是将计数存储在文档本身中,并在应用程序一侧对其进行相应更新。 – mikezter 2011-08-08 16:42:51