मैं समूह के लिए एकत्रीकरण के दौरान अपने दस्तावेज़ को दोबारा बदलने में समस्याएं चला रहा हूं। असल में मैं अपने प्रकार के आधार पर फ़ील्ड में प्रविष्टियों को धक्का देना चाहता हूं।मोंगोडीबी कुल चुनिंदा परियोजना
_id: P1
entities: [{type: A, val: X}, {type: B, val: X}, {type: A, val: Y}]
...
मैं $ करना चाहते तनाव कम और $ इन संस्थाओं परियोजना ताकि तरह एक संरचना मिल:
_id: P1
A: [X]
B: []
_id: P1
A: [Y]
B: []
_id: P1
A: []
B: [X]
तो मैं ए या बी या दोनों से एक समूह प्रदर्शन कर सकते हैं मैं एक संरचना इस प्रकार है यानी
$group: {
_id: {
A: $A,
B: $B
}
count: {$sum : 1}
मैंने सोचा कि मैं बस कर सकता है:
$unwind: $entities
$project: {
id: §id
A: {"$cond":[{"$eq":["$type","A"]},"$code"]}
B: {"$cond":[{"$eq":["$type","B"]},"$code"]}
}
$group: {
_id: "$id"
A: {$addToSet : "$A"}
}
01 क्योंकि मैं किसी और पर कुछ भी नहीं ऐसा नहीं कर सकते और मैं एक सशर्त अंदर $ धक्का उपयोग करने के लिए प्रबंधन नहीं किया
या की तरह
$unwind: $entities
$group: {
_id: "$id"
A: {"$cond":[{"$eq":["$type","A"]},$push: "$code", null]}
...
}
है कि कुछ में असफल रहने लेकिन दोनों संस्करणों असफल। निकटतम मुझे मिल प्रकार के आधार पर परियोजना है, लेकिन बाद से मैं एक तरह से क्षेत्र के लिए कुछ भी जोड़ने की नहीं है जब वहाँ कोई मुकाबला नहीं था नहीं मिल सकता है, मैं अंत:
_id: P1
A: [X,null,Y]
B: [null,X,null]
जो गिनती को खराब करता। मेरा दूसरा विचार शून्य को हटाने के लिए सरणी फ़िल्टर करना था। लेकिन मुझे इकाइयों को हटाने का कोई रास्ता नहीं मिला, क्योंकि फिर से $ cond मुझे खाली/"कुछ भी नहीं" अन्य मामला निर्दिष्ट करने नहीं देगा।
मैं एक यह आवश्यक प्रकार के मिलान के साथ प्रकार और सामग्री द्वारा समूह के साथ काम कर सकता है, लेकिन क्योंकि मैं कई प्रकार और मनमाने ढंग से एक समूहीकरण पेड़ में जिसके परिणामस्वरूप समूह हैं, यह बहुत जटिल हो सकता है महसूस कर रही। विचारों या गलतियों के संकेतों का बहुत स्वागत है।
धन्यवाद
संपादित करें: समाधान को स्वीकार कर लिया anwser
मैं थोड़ा यह अनुकूल करने के लिए, मामलों में जहां एक प्रकार के सभी सामग्री अशक्त था फिल्टर करने के लिए किया था पर आधारित है, क्योंकि अन्यथा यह हो गया होता मिलान के दौरान खो गया और क्योंकि मैं उस ज्ञान को रखना चाहता हूं। धन्यवाद!
{$project:{
A: {$cond: [
{$eq: ["$A", [false]]},
["N/A"],
"$A"
]},
B: {$cond: [
{$eq: ["$B", [false]]},
["N/A"],
"$B"
]},
}},
{ "$unwind": "$A" },
{ "$match": { "A": { "$ne": false } } },
{ "$group": {
"_id": "$_id",
"A": { "$push": "$A" },
"B": { "$first": "$B" }
}},
{ "$unwind": "$B" },
{ "$match": { "B": { "$ne": false } } },
{ "$group": {
"_id": "$_id",
"A": { "$first": "$A" },
"B": { "$push": "$B" }
}}
आपका _desired_ परिणाम क्या है? –