MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara memperbarui kunci tertentu di dalam sub-dokumen MongoDB menggunakan Sails.js &Waterline?

Anda dapat menggunakan .native() metode pada model Anda yang memiliki akses langsung ke driver mongo dan kemudian $set operator untuk memperbarui bidang secara mandiri. Namun, Anda harus terlebih dahulu mengonversi objek ke dokumen satu tingkat yang memiliki notasi titik seperti

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

sehingga Anda dapat menggunakannya sebagai:

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);
        }
    );
});

Untuk mengonversi objek mentah yang perlu diperbarui, gunakan fungsi berikut

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;
}

yang kemudian dapat Anda panggil dalam pembaruan Anda sebagai

var criteria = { "id": "1" },
    update = { "$set": convertNestedObjectToDotNotation(params) },
    options = { "new": true };

Periksa demo di bawah ini.

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. Bagaimana cara memuat 100 juta catatan ke MongoDB dengan Scala untuk pengujian kinerja?

  2. Bagaimana cara menampilkan detail pymongo.errors.OperationFailure?

  3. Mongodb tidak dapat terhubung ke localhost tetapi dapat terhubung ke alamat IP localhost

  4. Panggil Fungsi Javascript Tersimpan MongoDB di C# .Net

  5. Indeks luwak pada bidang dalam dokumen bersarang