MapReduce और इसे क्लाइंट-साइड करना बहुत धीमा होने वाला है - आपको एग्रीगेशन फ्रेमवर्क (MongoDB 2.2 में नया) का उपयोग करना चाहिए।
यह कुछ इस तरह दिख सकता है:
db.collection.aggregate([
{ $match : { "tags": { "$in": ["bar", "hello"] } } },
{ $unwind : "$tags" },
{ $match : { "tags": { "$in": ["bar", "hello"] } } },
{ $group : { _id: "$title", numRelTags: { $sum:1 } } },
{ $sort : { numRelTags : -1 } }
// optionally
, { $limit : 10 }
])
ध्यान दें कि पहले और तीसरे पाइपलाइन सदस्य समान दिखते हैं, यह जानबूझकर और आवश्यक है। यहां बताया गया है कि चरण क्या करते हैं:
- केवल उन्हीं दस्तावेज़ों को पास करें जिनमें "बार" या "हैलो" टैग हो।
- टैग सरणी को खोलना (मतलब प्रति टैग तत्व एक दस्तावेज़ में विभाजित करना
- केवल "बार" या "हैलो" टैग को पास करें (अर्थात शेष टैग को छोड़ दें)
- शीर्षक के आधार पर समूह (यह "$_id" या मूल दस्तावेज़ के किसी अन्य संयोजन द्वारा भी हो सकता है, जिसमें कितने टैग ("बार" और "हैलो") शामिल थे
- प्रासंगिक टैग की संख्या के अनुसार अवरोही क्रम में क्रमित करें
- (वैकल्पिक रूप से) लौटाए गए सेट को शीर्ष 10 तक सीमित करें।