चूंकि आपको बीच . के बीच आदान-प्रदान किए गए ईमेल की संख्या की गणना करने की आवश्यकता है 2 पते, एक एकीकृत between
project प्रोजेक्ट करना उचित होगा निम्नलिखित के रूप में फ़ील्ड:
db.a.aggregate([
{ $match: {
to: { $exists: true },
from: { $exists: true },
email: { $exists: true }
}},
{ $project: {
between: { $cond: {
if: { $lte: [ { $strcasecmp: [ "$to", "$from" ] }, 0 ] },
then: [ { $toLower: "$to" }, { $toLower: "$from" } ],
else: [ { $toLower: "$from" }, { $toLower: "$to" } ] }
}
}},
{ $group: {
"_id": "$between",
"count": { $sum: 1 }
}},
{ $sort :{ count: -1 } }
])
उदाहरण से एकीकरण तर्क बिल्कुल स्पष्ट होना चाहिए:यह दोनों ईमेल की वर्णानुक्रम में क्रमबद्ध सरणी है। $match
और $toLower
यदि आप अपने डेटा पर भरोसा करते हैं तो भाग वैकल्पिक हैं।
उदाहरण में प्रयुक्त ऑपरेटरों के लिए दस्तावेज़ीकरण: