यहाँ MongoDB 2.4.9 में एग्रीगेशन फ्रेमवर्क का उपयोग करते हुए एक उदाहरण दिया गया है जो मुझे लगता है कि आपके द्वारा किए गए परिणाम को प्राप्त करता है:
db.books.aggregate(
// Unwind the refs array
{ $unwind: "$refs" },
// Sort by refs.default descending so "true" values will be first, nulls last
{ $sort: {
"refs.default" : -1
}},
// Group and take the first ref; should either be "default:true" or first element
{ $group: {
_id: "$_id",
name: { $addToSet: "$name" },
refs: { $first: "$refs" }
}},
// (optional) Sort by name to match the example output
{ $sort: {
name: 1,
}},
// (optional) Clean up output
{ $project: {
_id: 0,
name: 1,
refs: 1
}}
)
नमूना परिणाम:
{
"result" : [
{
"name" : [
"Book1"
],
"refs" : {
"oid" : "object5",
"default" : true
}
},
{
"name" : [
"Book2"
],
"refs" : {
"oid" : "object5",
"default" : true
}
},
{
"name" : [
"Book3"
],
"refs" : {
"oid" : "object4"
}
},
{
"name" : [
"Book4"
],
"refs" : {
"oid" : "object4",
"default" : true
}
}
],
"ok" : 1
}
नोट:
-
यह
refs
. के लिए सॉर्ट ऑर्डर व्यवहार पर एक धारणा बनाता है जहां "डिफ़ॉल्ट:सत्य" गुम है। संक्षिप्त परीक्षण पर मूल क्रम संरक्षित प्रतीत होता है, इसलिए सरणी का "पहला" तत्व अपेक्षित है। -
उपयोग किए गए एकत्रीकरण ऑपरेटरों के कारण, आउटपुट
name
एक एकल तत्व सरणी है, औरrefs
अन्तर्निहित वस्तु बन जाती है। एग्रीगेशन फ्रेमवर्क में और हेर-फेर करने के बजाय, आप अपने एप्लिकेशन कोड में केवल सही फ़ील्ड्स का संदर्भ दे सकते हैं।