我收到了来自商店的大量订单,想要获得购买特定商品的所有订单的摘要,例如在过去的30天里。我的问题是,该集合中的> 60.000文件非常慢。
JSON中的文档如下所示:
{
"_id" : ObjectId("5531165b5e608cec23004e31"),
"Type" : NumberInt(2),
"Products" : [
{
"ProductId" : ObjectId("54a94242aa76d3db6cd5b23f"),
"Sku" : "abcdef",
"Quantity" : NumberInt(2),
"UnitPrice" : NumberInt(37)
},
{
"ProductId" : ObjectId("54a9426baa76d3db6cd5fbce"),
"Sku" : "lmnopq",
"Quantity" : NumberInt(2),
"UnitPrice" : NumberInt(42)
}
],
"Order" : "1234",
"Revenue" : NumberInt(158),
"Date" : ISODate("2015-04-14T12:55:28.000+0000"),
"Tax" : 25.23,
"Shipping" : NumberInt(20)
}
我使用的查询:
db.orders.aggregate([
{ $unwind: "$Products" }
{ $match: Date: { $gte: new Date("2015-03-21T00:00:00.000Z"), $lte: new Date("2015-04-19T23:59:59.999Z") }, Type: 2, Products.ProductId: ObjectId("54a94242aa76d3db6cd5b23f") }
{ $group: { _id: Products.ProductId, Sum: { $sum: 1 } } }
])
这是数据存储在集合中的方式的问题,还是我在查询中犯了错误?
提前谢谢。答案 0 :(得分:0)