आप .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>