हम समूह एकत्रीकरण चरणों में _id
रों के निर्माण के लिए कुछ सर्वोत्तम प्रथाओं को $group
चरण & नज़र भीतर _id
क्षेत्र को समझने के लिए जा रहे हैं। के इस क्वेरी पर नजर डालते हैं:
db.companies.aggregate([{
$match: {
founded_year: {
$gte: 2010
}
}
}, {
$group: {
_id: {
founded_year: "$founded_year"
},
companies: {
$push: "$name"
}
}
}, {
$sort: {
"_id.founded_year": 1
}
}]).pretty()
एक बात जो हमारे लिए स्पष्ट नहीं हो सकता है कर रहा है क्यों _id
क्षेत्र इस "दस्तावेज़" जिस तरह से निर्माण किया है? हम इसे इस तरह से किया जा सकता था है और साथ ही:
db.companies.aggregate([{
$match: {
founded_year: {
$gte: 2010
}
}
}, {
$group: {
_id: "$founded_year",
companies: {
$push: "$name"
}
}
}, {
$sort: {
"_id": 1
}
}]).pretty()
हम क्योंकि ये उत्पादन दस्तावेजों में यह इस तरह से नहीं करते हैं, - यह वास्तव में क्या मतलब है इस संख्या स्पष्ट नहीं है। तो, हम वास्तव में नहीं जानते हैं। और कुछ मामलों में, इसका मतलब है कि इन दस्तावेजों को समझने में शायद भ्रम हो सकता है।तो, एक अन्य मामले समूह के लिए हो सकता है कई क्षेत्रों के साथ एक _id
दस्तावेज़:
db.companies.aggregate([{
$match: {
founded_year: {
$gte: 2010
}
}
}, {
$group: {
_id: {
founded_year: "$founded_year",
category_code: "$category_code"
},
companies: {
$push: "$name"
}
}
}, {
$sort: {
"_id.founded_year": 1
}
}]).pretty()
$push
बस पैदा सरणियों के तत्वों को धक्का। अक्सर, यह ऊपरी स्तर पर पदोन्नत खेतों पर समूह के लिए आवश्यक हो सकता है:
db.companies.aggregate([{
$group: {
_id: {
ipo_year: "$ipo.pub_year"
},
companies: {
$push: "$name"
}
}
}, {
$sort: {
"_id.ipo_year": 1
}
}]).pretty()
यह भी एक अभिव्यक्ति है कि एक _id
कुंजी के रूप में एक दस्तावेज पर ले कर जाता है करने के लिए एकदम सही है।
db.companies.aggregate([{
$match: {
"relationships.person": {
$ne: null
}
}
}, {
$project: {
relationships: 1,
_id: 0
}
}, {
$unwind: "$relationships"
}, {
$group: {
_id: "$relationships.person",
count: {
$sum: 1
}
}
}, {
$sort: {
count: -1
}
}])
एसक्यूएल में मैं द्वारा समूह है और मैं $ राज्य द्वारा समूह के लिए क्षेत्र है, _ id किसी भी एसक्यूएल अनुरूप तरह नहीं दिखता है। – user1700890