वैसे यहाँ बहुत अधिक विवरण नहीं है, लेकिन मैं विचार के लिए एक नमूना मामला दे सकता हूँ। दस्तावेज़ों के निम्नलिखित सेट पर विचार करें:
{ "user" : "fred", "color" : "black" }
{ "user" : "bill", "color" : "blue" }
{ "user" : "ted", "color" : "red" }
{ "user" : "ted", "color" : "black" }
{ "user" : "fred", "color" : "blue" }
{ "user" : "bill", "color" : "red" }
{ "user" : "bill", "color" : "orange" }
{ "user" : "fred", "color" : "orange" }
{ "user" : "ted", "color" : "orange" }
{ "user" : "ally", "color" : "orange" }
{ "user" : "alice", "color" : "orange" }
{ "user" : "alice", "color" : "red" }
{ "user" : "bill", "color" : "purple" }
तो मान लीजिए कि आप बुलबुला करना चाहते हैं आपके परिणामों के शीर्ष पर "बिल" और "टेड" उपयोगकर्ताओं के लिए आइटम, फिर user
द्वारा क्रमबद्ध बाकी सब कुछ और color
. आप क्या कर सकते हैं दस्तावेज़ों को $project
के माध्यम से चलाना कुल मिलाकर चरण इस प्रकार है:
db.bubble.aggregate([
// Project selects the fields to show, and we add a weight value
{$project: {
_id: 0,
"user": 1,
"color": 1,
"weight": {$cond:[
{$or: [
{$eq: ["$user","bill"]},
{$eq: ["$user","ted"]}
]},
1,
0
]}
}},
// Then sort the results with the `weight` first, then `user` and `color`
{$sort: { weight: -1, user: 1, color: 1 }}
])
तो वह जो करता है वह सशर्त रूप से weight
के लिए एक मान निर्दिष्ट करता है इस आधार पर कि क्या user
आवश्यक मानों में से एक से मिलान किया गया था। जो दस्तावेज़ मेल नहीं खाते, उन्हें बस एक 0
दिया जाता है मूल्य।
जब हम इसे संशोधित स्थानांतरित करते हैं दस्तावेज़ पर $sort
चरण, नया weight
कुंजी का उपयोग परिणामों को क्रमित करने के लिए किया जा सकता है ताकि "भारित" दस्तावेज़ शीर्ष पर हों, और उसके बाद कुछ और होगा।
आप $project के लिए बहुत कुछ कर सकते हैं। इस तरह एक वजन। अधिक जानकारी के लिए ऑपरेटर संदर्भ देखें:
http://docs.mongodb.org/manual/reference/operator/aggregation/