MongoDB संस्करण 3.4 में इष्टतम तरीका।
mongod
. का यह संस्करण $split
देता है
ऑपरेटर जो, निश्चित रूप से दिखाए गए अनुसार स्ट्रिंग को विभाजित करता है यहां
।
फिर हम का इस्तेमाल करके वैरिएबल को नया परिकलित मान असाइन करते हैं $let
परिवर्तनीय ऑपरेटर। फिर नए मान का उपयोग में . में किया जा सकता है $arrayElemAt
एक निर्दिष्ट सूचकांक पर तत्व वापस करने के लिए ऑपरेटर; 0
पहले तत्व और -1
. के लिए अंतिम तत्व के लिए।
ध्यान दें कि इन . में अभिव्यक्ति हमें पूर्णांक की स्ट्रिंग को वापस करने के लिए अंतिम तत्व को विभाजित करने की आवश्यकता है।
अंत में हमें कर्सर
को पुनरावृति करने की आवश्यकता है ऑब्जेक्ट करें और संख्या
या parseInt
और बल्क ऑपरेशन और bulkWrite()का उपयोग करें कोड>
$set
की विधि
अधिकतम दक्षता के लिए उन क्षेत्रों के लिए मूल्य।
let requests = [];
db.coll.aggregate(
[
{ "$project": {
"person": {
"$let": {
"vars": {
"infos": { "$split": [ "$person", "," ] }
},
"in": {
"name": { "$arrayElemAt": [ "$$infos", 0 ] },
"age": {
"$arrayElemAt": [
{ "$split": [
{ "$arrayElemAt": [ "$$infos", -1 ] },
" "
]},
-1
]
}
}
}
}
}}
]
).forEach(document => {
requests.push({
"updateOne": {
"filter": { "_id": document._id },
"update": {
"$set": {
"name": document.person.name,
"age": Number(document.person.age)
},
"$unset": { "person": " " }
}
}
});
if ( requests.length === 500 ) {
// Execute per 500 ops and re-init
db.coll.bulkWrite(requests);
requests = [];
}}
);
// Clean up queues
if(requests.length > 0) {
db.coll.bulkWrite(requests);
}
MongoDB 3.2 या नया।
MongoDB 3.2 पुराने Bulk()
को हटा देता है
एपीआई और उससे जुड़ी तरीके
और bulkWrite()
. प्रदान करता है विधि लेकिन यह $split
. प्रदान नहीं करती है ऑपरेटर इसलिए हमारे पास यहां एकमात्र विकल्प मैपरेडस ()
हमारे डेटा को बदलने के लिए विधि और फिर बल्क ऑपरेशन का उपयोग करके संग्रह को अपडेट करें।
var mapFunction = function() {
var person = {},
infos = this.person.split(/[,\s]+/);
person["name"] = infos[0];
person["age"] = infos[2];
emit(this._id, person);
};
var results = db.coll.mapReduce(
mapFunction,
function(key, val) {},
{ "out": { "inline": 1 } }
)["results"];
results.forEach(document => {
requests.push({
"updateOne": {
"filter": { "_id": document._id },
"update": {
"$set": {
"name": document.value.name,
"age": Number(document.value.age)
},
"$unset": { "person": " " }
}
}
});
if ( requests.length === 500 ) {
// Execute per 500 operations and re-init
db.coll.bulkWrite(requests);
requests = [];
}}
);
// Clean up queues
if(requests.length > 0) {
db.coll.bulkWrite(requests);
}
MongoDB संस्करण 2.6 या 3.0।
हमें अब बहिष्कृत बल्क API का उपयोग करने की आवश्यकता है ।
var bulkOp = db.coll.initializeUnorderedBulkOp();
var count = 0;
results.forEach(function(document) {
bulkOp.find({ "_id": document._id}).updateOne(
{
"$set": {
"name": document.value.name,
"age": Number(document.value.age)
},
"$unset": { "person": " " }
}
);
count++;
if (count === 500 ) {
// Execute per 500 operations and re-init
bulkOp.execute();
bulkOp = db.coll.initializeUnorderedBulkOp();
}
});
// clean up queues
if (count > 0 ) {
bulkOp.execute();
}