इसमें फ़ील्ड शामिल नहीं है क्योंकि आपने फ़ील्ड को वापस करने के लिए नहीं कहा था। यहां जो चीज आपको याद आ रही है वह है $first
या इसी तरह का "accumulator"
$group
।
इसके अलावा, यदि आप खाली ईमेल पता नहीं चाहते हैं, तो उसे में शामिल न करें। $मिलान
पाइपलाइन चरण, क्योंकि यह करने के लिए सबसे कुशल काम है।
db.collection.aggregate([
{ $match: { branch: "CO", "customerEmail": { "$ne": "" } } },
{ $group:
{
_id: { customer:"$customerID"},
email: { "$first": "$customerEmail" }
}
}
]);
एक "पाइपलाइन" केवल $ जैसे चरणों से "आउटपुट" लौटाती है समूह
या $project
कि आप वास्तव में इसे पूछते हैं। बिल्कुल "यूनिक्स पाइप" की तरह |
ऑपरेटर, "अगले चरण" के लिए केवल वही चीजें उपलब्ध हैं जो आप आउटपुट करते हैं।
यह बस से स्पष्ट होना चाहिए:
db.collection.aggregate([
{ $match: { branch: "CO" } },
{ $group:
{
_id: { customer:"$customerID"}
}
}
]);
या यहां तक कि:
db.collection.aggregate([
{ $match: { branch: "CO" } },
{ $project:
{
_id: { customer:"$customerID"}
}
}
]);
जो निश्चित रूप से केवल _id
लौटाता है मूल्य क्योंकि आपने यही मांगा है।
आपके पास किसी भी पाइपलाइन चरण में केवल उस डेटा तक पहुंच है जो "पिछले चरण द्वारा आउटपुट" था। एक $group
के अंदर
यानी केवल _id
समूहीकरण कुंजी के लिए, और जो कुछ भी निर्दिष्ट किया गया था "स्पष्ट रूप से" एक मान्य "accumulator"
का इस्तेमाल करना किसी अन्य संपत्ति के लिए जिसे आप वापस करना चाहते हैं। कोई भी संचायक (जो यहां "स्ट्रिंग" के लिए मान्य है) करेगा, लेकिन _id
के बाहर कुछ भी करेगा होना चाहिए एक "accumulator"
का इस्तेमाल करें ।
मेरा सुझाव है कि सभी एकत्रीकरण ऑपरेटरों को देखने के लिए समय निकालें। और वे वास्तव में क्या करते हैं। प्रत्येक ऑपरेटर के साथ उदाहरण उपयोग होता है