हम ऐसा करने के लिए एकत्रीकरण ढांचे का उपयोग कर सकते हैं। सबसे पहले हमें $sort
की ज़रूरत है
user
. द्वारा और "_आईडी"। वहां से, हम फिर $group
"उपयोगकर्ता" द्वारा और $last
का उपयोग करें
प्रत्येक उपयोगकर्ता के लिए अंतिम दस्तावेज़ वापस करने के लिए संचायक ऑपरेटर। ध्यान दें कि हम $first
का भी उपयोग कर सकते हैं
संचायक ऑपरेटर यदि हम अपने दस्तावेज़ों को अवरोही क्रम में क्रमबद्ध करते हैं, लेकिन आरोही क्रम में क्रमबद्ध करते हैं और $last
का उपयोग करते हैं हमारी मंशा स्पष्ट करो।
db.collection.aggregate([
{ "$sort": { "user": 1, "_id": -1 } },
{ "$group": {
"_id": "$user",
"user": { "$last": "$$ROOT" }
}}
])
जो उत्पादन करता है:
{
"_id" : "fje93jrg4",
"user" : {
"_id" : 2,
"user" : "fje93jrg4",
"event" : null,
"group" : null,
"name" : "Bob",
"text" : "Testing"
}
}
{
"_id" : "94fg844f",
"user" : {
"_id" : 1,
"user" : "94fg844f",
"event" : null,
"group" : null,
"name" : "Jake",
"text" : "Hello world"
}
}
{
"_id" : null,
"user" : {
"_id" : 4,
"user" : null,
"event" : "d0j3n9fn3",
"group" : null,
"name" : "My Event",
"text" : "Testing 2"
}
}
हम एक $project
जोड़ना चाह सकते हैं
हमारी पाइपलाइन में लेकिन ऐसा करने से प्रदर्शन में गिरावट आएगी। हालांकि, यह वायर पर भेजे गए डेटा की मात्रा और क्लाइंट साइड पर दस्तावेज़ों को डीकोड करने के लिए उपयोग किए जाने वाले समय और मेमोरी दोनों को कम कर देगा यदि लौटाए गए दस्तावेज़ में सभी कुंजी/मूल्य जोड़े की आवश्यकता नहीं है।
$project
मंच इस तरह दिखता है:
{ "$project": {
"_id": "$user._id",
"user": "$user.user",
"event": "$user.event",
"group": "$user.group",
"name": "$user.name",
"text": "$user.text"
}}