आप इसे एकत्रीकरण पाइपलाइन के साथ कर सकते हैं। यहाँ नोड के लिए निर्यात किया गया कोड है:
[
{
'$match': {
'$or': [
{
'orderCreatedForDate': new Date('Fri, 31 Jan 2020 05:00:00 GMT')
}, {
'orderCreatedForDate': new Date('Fri, 24 Jan 2020 05:00:00 GMT')
}
]
}
}, {
'$unwind': {
'path': '$totalOrder',
'includeArrayIndex': 'string'
}
}, {
'$group': {
'_id': {
'productCode': '$totalOrder.productCode',
'date': '$orderCreatedForDate'
},
'tradeCopies': {
'$sum': '$totalOrder.tradeCopies'
},
'subscriptionCopies': {
'$sum': '$totalOrder.subscriptionCopies'
},
'freeCopies': {
'$sum': '$totalOrder.freeCopies'
},
'institutionalCopies': {
'$sum': '$totalOrder.institutionalCopies'
},
'productCode': {
'$last': '$totalOrder.productCode'
},
'publicationName': {
'$last': '$totalOrder.publicationName'
},
'editionName': {
'$last': '$totalOrder.editionName'
},
'publicationDate': {
'$last': '$orderCreatedForDate'
}
}
}, {
'$sort': {
'publicationDate': 1
}
}, {
'$group': {
'_id': '$_id.productCode',
'tradeCopies': {
'$last': '$tradeCopies'
},
'previousTradeCopies': {
'$first': '$tradeCopies'
},
'subscriptionCopies': {
'$last': '$subscriptionCopies'
},
'previousSubscriptionCopies': {
'$first': '$subscriptionCopies'
},
'institutionalCopies': {
'$last': '$institutionalCopies'
},
'previousInstitutionalCopies': {
'$first': '$institutionalCopies'
},
'freeCopies': {
'$last': '$freeCopies'
},
'previousFreeCopies': {
'$first': '$freeCopies'
},
'productCode': {
'$last': '$productCode'
},
'publicationName': {
'$last': '$publicationName'
},
'editionName': {
'$last': '$editionName'
},
'publicationDate': {
'$last': '$publicationDate'
}
}
}, {
'$project': {
'productCode': 1,
'publicationName': 1,
'editionName': 1,
'publicationDate': 1,
'tradeCopies': 1,
'subscriptionCopies': 1,
'institutionalCopies': 1,
'freeCopies': 1,
'previousWeekCopies': [
{
'tradeCopies': '$previousTradeCopies',
'subscriptionCopies': '$previousSubscriptionCopies',
'freeCopies': '$previousFreeCopies',
'institutionalCopies': '$previousInstitutionalCopies'
}
]
}
}
]
आइए एक नज़र डालते हैं कि प्रत्येक चरण में क्या हो रहा है:
[{$match: {
$or: [ {orderCreatedForDate: ISODate('2020-01-31T05:00:00.000+00:00')},
{orderCreatedForDate: ISODate('2020-01-24T05:00:00.000+00:00')}]
}},
हम उन आदेशों के मिलान से शुरू करते हैं जिनमें वे तिथियां होती हैं जिनकी हम परवाह करते हैं।
{$unwind: {
path: "$totalOrder",
includeArrayIndex: 'string'
}},
फिर हम TotalOrder ऐरे को खोल देते हैं। यह प्रत्येक आदेश के लिए एक दस्तावेज़ बनाता है।
{$group: {
_id: {productCode: "$totalOrder.productCode", date: "$orderCreatedForDate"},
tradeCopies: {
$sum: "$totalOrder.tradeCopies"
},
subscriptionCopies: {
$sum: "$totalOrder.subscriptionCopies"
},
freeCopies: {
$sum: "$totalOrder.freeCopies"
},
institutionalCopies: {
$sum: "$totalOrder.institutionalCopies"
},
productCode: { $last: "$totalOrder.productCode"},
publicationName: { $last: "$totalOrder.publicationName"},
editionName: { $last: "$totalOrder.editionName"},
publicationDate: { $last: "$orderCreatedForDate"}
}},
फिर हम दस्तावेज़ों को उत्पाद कोड और दिनांक के अनुसार समूहित करते हैं। यह हमें आवश्यक राशि उत्पन्न करने की अनुमति देता है।
{$sort: {
publicationDate: 1
}},
फिर हम अपने दस्तावेज़ों को क्रमबद्ध करते हैं ताकि हमें पता चले कि पुराने दस्तावेज़ पहले हैं।
{$group: {
_id: "$_id.productCode",
tradeCopies: {
$last: "$tradeCopies"
},
previousTradeCopies: {
$first: "$tradeCopies"
},
subscriptionCopies: {
$last: "$subscriptionCopies"
},
previousSubscriptionCopies: {
$first: "$subscriptionCopies"
},
institutionalCopies: {
$last: "$institutionalCopies"
},
previousInstitutionalCopies: {
$first: "$institutionalCopies"
},
freeCopies: {
$last: "$freeCopies"
},
previousFreeCopies: {
$first: "$freeCopies"
},
productCode: { $last: "$productCode"},
publicationName: { $last: "$publicationName"},
editionName: { $last: "$editionName"},
publicationDate: { $last: "$publicationDate"}
}},
इसके बाद हम अपने दस्तावेज़ों को उत्पाद कोड के आधार पर समूहबद्ध करते हैं ताकि हम प्रत्येक उत्पाद कोड के लिए एक दस्तावेज़ बना सकें।
{$project: {
productCode: 1,
publicationName: 1,
editionName: 1,
publicationDate: 1,
tradeCopies: 1,
subscriptionCopies: 1,
institutionalCopies: 1,
freeCopies: 1,
previousWeekCopies: [{
tradeCopies: "$previousTradeCopies",
subscriptionCopies: "$previousSubscriptionCopies",
freeCopies: "$previousFreeCopies",
institutionalCopies: "$previousInstitutionalCopies"
}
]
}}]
अंत में, हम उन क्षेत्रों को प्रोजेक्ट करते हैं जिनकी हमें आवश्यकता होती है, जिस प्रारूप में हमें उनकी आवश्यकता होती है।
यहां कुछ स्क्रीनशॉट दिए गए हैं ताकि आप देख सकें कि प्रत्येक चरण में क्या हो रहा है।
Node.js के साथ एग्रीगेशन पाइपलाइन का उपयोग करने के तरीके के बारे में अधिक जानने के लिए, देखें https://www.mongodb.com/blog/post/quick-start-nodejs--mongodb--how-to-analyze-data- एकत्रीकरण-ढांचे का उपयोग करना . मैं एकत्रीकरण पाइपलाइन पर MongoDB विश्वविद्यालय के मुफ्त पाठ्यक्रम की भी अत्यधिक अनुशंसा करता हूं:https://university.mongodb। कॉम/पाठ्यक्रम/एम121/के बारे में