इस स्कीमा का पालन करने के लिए विधि 2 में स्कीमा को और पुनर्गठित करने की अनुशंसा करेंगे:
/* 0 */
{
"_id" : ObjectId("5577fd322ab13c8cacdd0e70"),
"order_id" : "VjprK",
"user_id" : "777",
"data" : [
{
"order_date" : ISODate("2015-04-18T08:57:42.514Z"),
"amount" : 100
},
{
"order_date" : ISODate("2015-04-19T08:57:42.514Z"),
"amount" : 200
},
{
"order_date" : ISODate("2015-04-20T08:57:42.514Z"),
"amount" : 300
},
{
"order_date" : ISODate("2015-04-21T08:57:42.514Z"),
"amount" : 400
}
]
}
जिसे आप किसी दी गई दिनांक सीमा के साथ जोड़ सकते हैं, जैसे 2015-04-18
करने के लिए 2015-04-19
. निम्नलिखित पाइपलाइन पर विचार करें:
var start = new Date(2015, 3, 18),
end = new Date(2015, 3, 20);
db.orders.aggregate([
{
"$match": {
"user_id": "777",
"data.order_date": {
"$gte": start,
"$lt": end
}
}
},
{
"$unwind": "$data"
},
{
"$match": {
"data.order_date": {
"$gte": start,
"$lt": end
}
}
},
{
"$group": {
"_id": "$user_id",
"total": {
"$sum": "$data.amount"
}
}
}
])
नमूना आउटपुट
/* 0 */
{
"result" : [
{
"_id" : "777",
"total" : 300
}
],
"ok" : 1
}