MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

लुकअप से अंतिम दस्तावेज़ लौटाएं

आप या तो $slice . का उपयोग कर सकते हैं

db.groups.aggregate([
   { "$lookup": {
     "from": "posts",
     "localField": "_id",
     "foreignField": "group",
     "as": "post"
   }},
   { "$addFields": {
     "post": { "$slice": ["$post", -1] }
   }}
])

या MongoDB 3.6 के साथ, $lookup . का उपयोग करके बस अंतिम पोस्ट लौटाएं इसके गैर-सहसंबद्ध रूप में:

db.groups.aggregate([
   { "$lookup": {
     "from": "posts",
     "as": "post",
     "let": { "id": "$_id" },
     "pipeline": [
       { "$match": { 
          "$expr": { "$eq": [ "$$id", "$group" ] }
       }},
       { "$sort": { "_id": -1 } },
       { "$limit": 1 }
     ]
   }}
])

उत्तरार्द्ध बेहतर है क्योंकि आप केवल उस विदेशी संग्रह से दस्तावेज़ लौटाते हैं जो आप वास्तव में चाहते हैं।

यदि आप निश्चित हैं कि आप "एकवचन" चाहते हैं तो $arrayElemAt $slice . के साथ विनिमेय है प्रारंभिक उदाहरण में लेकिन केवल अंतिम तत्व की सरणी के बजाय अंतिम तत्व देता है। आप पाइपलाइन से केवल एक तत्व लेने के लिए इसे दूसरे रूप में भी जोड़ सकते हैं, जो "हमेशा" एक सरणी है:

db.groups.aggregate([
   { "$lookup": {
     "from": "posts",
     "as": "post",
     "let": { "id": "$_id" },
     "pipeline": [
       { "$match": { 
          "$expr": { "$eq": [ "$$id", "$group" ] }
       }},
       { "$sort": { "_id": -1 } },
       { "$limit": 1 }
     ]
   }},
   { "$addFields": {
     "post": { "$arrayElemAt": [ "$post", 0 ] }
   }}
])

और इस तरह इसके आसपास 0 . है -1 . के बजाय अनुक्रमणिका आखिरी के लिए।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सी # में स्व-हस्ताक्षरित प्रमाणपत्रों के साथ मोंगोडीबी एसएसएल

  2. संग्रह में चयनित दस्तावेज़ की स्थिति प्राप्त करें [mongoDB]

  3. अनुक्रमणिका में एक सरणी फ़ील्ड का एक अलग एकत्रीकरण प्राप्त करना

  4. MongoDB और Mongoose के बीच अंतर

  5. लूप में बुलाए गए डीबी प्रश्नों से पुनर्प्राप्त डेटा लौटाने में समस्या