/ / Mongodb एकत्रीकरण का उपयोग कर कई क्षेत्रों की अलग गिनती - mongodb, mongodb-query, एकत्रीकरण-ढांचे, विशिष्ट

मोंगोडब एकत्रीकरण का उपयोग करके कई क्षेत्रों की अलग-अलग गिनती - मोंगोडब, मोंगोडब-क्वेरी, एग्रीगेशन-फ्रेमवर्क, अलग

मैं एक मोंगो डीबी एकत्रीकरण क्वेरी द्वारा कई क्षेत्रों के अलग-अलग मूल्यों की गणना करने की कोशिश कर रहा हूं।

तो यहां मेरा डेटा है:

{
"car_type": "suv",
"color": "red",
"num_doors": 4
},
{
"car_type": "hatchback",
"color": "blue",
"num_doors": 4
},
{
"car_type": "wagon",
"color": "red",
"num_doors": 4
}

मैं प्रत्येक क्षेत्र की एक अलग गिनती चाहता हूं:

distinct_count_car_type=3
distinct_count_color=2
distinct_count_num_doors=1

मैं कई क्षेत्रों को समूहित करने में सक्षम था और फिर एक अलग गिनती करता था लेकिन यह मुझे केवल पहले क्षेत्र पर एक गिनती दे सकता था। इनमें से सभी नहीं। और यह भी डेटा का एक बड़ा सेट है।

उत्तर:

उत्तर № 1 के लिए 1

आप "की शक्ति की तलाश कर रहे हैं ... $objectToArray!

db.foo.aggregate([
{$project: {x: {$objectToArray: "$$CURRENT"}}}
,{$unwind: "$x"}
,{$match: {"x.k": {$ne: "_id"}}}
,{$group: {_id: "$x.k", y: {$addToSet: "$x.v"}}}
,{$addFields: {size: {"$size":"$y"}} }
]);

यह उपज होगा:

{ "_id" : "num_doors", "y" : [ 4 ], "size" : 1 }
{ "_id" : "color", "y" : [ "blue", "red" ], "size" : 2 }
{
"_id" : "car_type",
"y" : [
"wagon",
"hatchback",
"suv"
],
"size" : 3
}

आप ऐसा कर सकते हैं $projectया $addFieldsजैसा कि आप अद्वितीय मूल्यों या आकार के सेट को शामिल या बहिष्कृत करने के लिए उपयुक्त दिखते हैं।


जवाब के लिए 5 № 2

निम्नलिखित समग्र पाइपलाइन चलाने से आपको वांछित परिणाम मिलना चाहिए:

db.collection.aggregate([
{
"$group": {
"_id": null,
"distinct_car_types": { "$addToSet": "$car_type" },
"distinct_colors": { "$addToSet": "$color" },
"distinct_num_doors": { "$addToSet": "$num_doors" }
}
},
{
"$project": {
"distinct_count_car_type": { "$size": "$distinct_car_types" },
"distinct_count_color": { "$size": "$distinct_colors" },
"distinct_count_num_doors": { "$size": "$distinct_num_doors" }
}
}
])