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

मैं Sails.js और Waterline का उपयोग करके MongoDB उप-दस्तावेज़ के अंदर एक विशिष्ट कुंजी को कैसे अपडेट करूं?

आप .native() आपके मॉडल पर विधि जिसमें मोंगो ड्राइवर तक सीधी पहुंच है और फिर $सेट ऑपरेटर स्वतंत्र रूप से क्षेत्रों को अद्यतन करने के लिए। हालाँकि, आपको पहले ऑब्जेक्ट को एक-स्तरीय दस्तावेज़ में बदलना होगा जिसमें डॉट नोटेशन जैसे

. हो
{
    "name": "Dan",
    "favorites.season": "Summer"
}

ताकि आप इसका उपयोग इस प्रकार कर सकें:

var criteria = { "id": "1" },
    update = { "$set": { "name": "Dan", "favorites.season": "Summer" } },
    options = { "new": true };

// Grab an instance of the mongo-driver
Person.native(function(err, collection) {        
    if (err) return res.serverError(err);

    // Execute any query that works with the mongo js driver
    collection.findAndModify(
        criteria, 
        null,
        update,
        options,
        function (err, updatedPerson) {
            console.log(updatedPerson);
        }
    );
});

कच्ची वस्तु को बदलने के लिए जिसे अद्यतन करने की आवश्यकता है, निम्न फ़ंक्शन का उपयोग करें

var convertNestedObjectToDotNotation = function(obj){
    var res = {};
    (function recurse(obj, current) {
        for(var key in obj) {
            var value = obj[key];
            var newKey = (current ? current + "." + key : key);  // joined key with dot
            if  (value && typeof value === "object") {
                recurse(value, newKey);  // it's a nested object, so do it again
            } else {
                res[newKey] = value;  // it's not an object, so set the property
            }
        }
    })(obj);

    return res;
}

जिसे आप अपने अपडेट में

. के रूप में कॉल कर सकते हैं
var criteria = { "id": "1" },
    update = { "$set": convertNestedObjectToDotNotation(params) },
    options = { "new": true };

नीचे डेमो देखें।

var example = {
	"name" : "Dan",
	"favorites" : {
		"season" : "winter"
	}
};

var convertNestedObjectToDotNotation = function(obj){
	var res = {};
	(function recurse(obj, current) {
		for(var key in obj) {
			var value = obj[key];
			var newKey = (current ? current + "." + key : key);  // joined key with dot
			if	(value && typeof value === "object") {
				recurse(value, newKey);  // it's a nested object, so do it again
			} else {
				res[newKey] = value;  // it's not an object, so set the property
			}
		}
	})(obj);
	
	return res;
}


var update = { "$set": convertNestedObjectToDotNotation(example) };

pre.innerHTML = "update =  " + JSON.stringify(update, null, 4);
<pre id="pre"></pre>


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. बीएसओएन ::टाइमस्टैम्प को रूबी टाइम में कैसे बदलें और इसके विपरीत

  2. मोंगो अद्यतन सरणी तत्व (.NET ड्राइवर 2.0)

  3. Node.js में वादों के साथ MongoDB का उपयोग कैसे करें?

  4. खुलने का समय MongoDB के लिए स्कीमा

  5. MongoDB में मानों के बजाय क्वेरी और फ़िल्टर कुंजी नाम