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

MongoDB/Mongoose में अपने पिछले मान का उपयोग करके किसी फ़ील्ड को कैसे अपडेट करें?

आप उस दस्तावेज़ के मानों का उल्लेख नहीं कर सकते जिसे आप अद्यतन करना चाहते हैं, इसलिए दस्तावेज़ को पुनः प्राप्त करने के लिए आपको एक क्वेरी और इसे अद्यतन करने के लिए दूसरी क्वेरी की आवश्यकता होगी। ऐसा लगता है कि कोई सुविधा अनुरोध है उसके लिए OPEN . में 2016 से राज्य।

अगर आपके पास ऐसे दस्तावेज़ों का संग्रह है जो इस तरह दिखते हैं:

{ "_id" : ObjectId("590a4aa8ff1809c94801ecd0"), "name" : "bar" }

MongoDB शेल का उपयोग करके, आप कुछ इस तरह कर सकते हैं:

db.test.find({ name: "bar" }).snapshot().forEach((doc) => {
    doc.name = "foo-" + doc.name;

    db.test.save(doc);
});

दस्तावेज़ को उम्मीद के मुताबिक अपडेट किया जाएगा:

{ "_id" : ObjectId("590a4aa8ff1809c94801ecd0"), "name": "foo-bar" }

.snapshot() पर ध्यान दें call.यह सुनिश्चित करता है कि क्वेरी एक दस्तावेज़ को कई बार वापस नहीं करेगी क्योंकि दस्तावेज़ आकार में वृद्धि के कारण एक हस्तक्षेप लेखन ऑपरेशन इसे स्थानांतरित कर देता है।

इसे अपने Mongoose उदाहरण पर लागू करना, जैसा कि इस आधिकारिक उदाहरण में बताया गया है। :

Cat.findById(1, (err, cat) => {
    if (err) return handleError(err);

    cat.name = cat.name + "bar";

    cat.save((err, updatedCat) => {
        if (err) return handleError(err);

        ...
    });
});

उल्लेखनीय है कि एक $concat है एग्रीगेशन फ्रेमवर्क में ऑपरेटर, लेकिन दुर्भाग्य से आप इसका उपयोग update . में नहीं कर सकते क्वेरी।

वैसे भी, आपको जो करना है, उसके आधार पर आप उसका उपयोग $out एकत्रीकरण के परिणामों को एक नए संग्रह में सहेजने के लिए ऑपरेटर।

उसी उदाहरण के साथ, आप करेंगे:

db.test.aggregate([{
    $match: { name: "bar" }
}, {
    $project: { name: { $concat: ["foo", "-", "$name"] }}
}, {
    $out: "prefixedTest"
}]);

और एक नया संग्रह prefixedTest इस तरह दिखने वाले दस्तावेज़ों के साथ बनाया जाएगा:

{ "_id" : ObjectId("XXX"), "name": "foo-bar" }

एक संदर्भ के रूप में, इसी विषय के बारे में एक और दिलचस्प प्रश्न है जिसमें कुछ उत्तर पढ़ने लायक हैं:किसी अन्य फ़ील्ड के मान का उपयोग करके MongoDB फ़ील्ड को अपडेट करें



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्प्रिंग डेटा MongoDB - इंडेक्स, एनोटेशन और कन्वर्टर्स

  2. विभिन्न क्षेत्रों के लिए Mongoid समान एम्बेडेड दस्तावेज़ प्रकार

  3. मोंगोडीबी सी # ड्राइवर के साथ, मैं रन कमांड कैसे जारी करूं?

  4. नेस्टेड सरणी तत्वों पर मोंगोडब क्वेरी

  5. MongoDB में वस्तुओं की सरणी डालें