এই কাজ করতে সবচেয়ে ভালো উপায় সংস্করণ 4.2+ যা আপডেট ডকুমেন্ট এবং অ্যাগ্রিগেশন পাইপলাইন ব্যবহার করতে পারবেন হয় updateOne, updateManyবা updateসংগ্রহ পদ্ধতি। মনে রাখবেন যে সমস্ত ভাষা চালক না থাকলে পরবর্তীকালে বেশিরভাগ ক্ষেত্রেই অবচয় করা হয়েছে।
মঙ্গোডিবি 4.2+
সংস্করণ ৪.২ $setপাইপলাইন মঞ্চ অপারেটরটিও প্রবর্তন করে যা এর জন্য একটি উপনাম $addFields। আমরা যা অর্জন করার চেষ্টা করছি তার মানচিত্র$set হিসাবে আমি এখানে ব্যবহার করব ।
db.collection.<update method>(
{},
[
{"$set": {"name": { "$concat": ["$firstName", " ", "$lastName"]}}}
]
)
মঙ্গোডিবি 3.4+
3.4+ এ আপনি $addFieldsএবং $outসমষ্টি পাইপলাইন অপারেটরগুলি ব্যবহার করতে পারেন ।
db.collection.aggregate(
[
{ "$addFields": {
"name": { "$concat": [ "$firstName", " ", "$lastName" ] }
}},
{ "$out": "collection" }
]
)
মনে রাখবেন এটি আপনার সংগ্রহ আপডেট করে না বরং পরিবর্তে বিদ্যমান সংগ্রহটি প্রতিস্থাপন করে বা একটি নতুন তৈরি করে। এছাড়াও আপডেট অপারেশনের জন্য যা "টাইপ কাস্টিং" প্রয়োজন আপনার ক্লায়েন্ট সাইড প্রসেসিং প্রয়োজন হবে এবং অপারেশনের উপর নির্ভর করে আপনাকে find()পদ্ধতির পরিবর্তে পদ্ধতিটি ব্যবহার করতে হতে পারে .aggreate()।
মঙ্গোডিবি 3.2 এবং 3.0
আমরা যেভাবে এটি করি তা হ'ল $projectআমাদের দস্তাবেজগুলিকে আইং করে এবং $concatস্ট্রিং অগ্রিগেশন অপারেটরটি সংক্ষিপ্ত স্ট্রিংটি ফিরিয়ে আনার জন্য। আমরা সেখান থেকে, আপনি তারপরে কার্সারটি পুনরায় শুরু করুন এবং সর্বাধিক দক্ষতার জন্য বাল্ক অপারেশনগুলি$set ব্যবহার করে আপনার দস্তাবেজে নতুন ক্ষেত্রটি যুক্ত করতে আপডেট অপারেটরটি ব্যবহার করুন ।
সমষ্টি কোয়েরি:
var cursor = db.collection.aggregate([
{ "$project": {
"name": { "$concat": [ "$firstName", " ", "$lastName" ] }
}}
])
মঙ্গোডিবি 3.2 বা আরও নতুন
এটি থেকে আপনার bulkWriteপদ্ধতিটি ব্যবহার করা উচিত ।
var requests = [];
cursor.forEach(document => {
requests.push( {
'updateOne': {
'filter': { '_id': document._id },
'update': { '$set': { 'name': document.name } }
}
});
if (requests.length === 500) {
//Execute per 500 operations and re-init
db.collection.bulkWrite(requests);
requests = [];
}
});
if(requests.length > 0) {
db.collection.bulkWrite(requests);
}
মঙ্গোডিবি 2.6 এবং 3.0
এই সংস্করণ থেকে আপনার এখন অবহেলিত Bulkএপিআই এবং এর সম্পর্কিত পদ্ধতিগুলি ব্যবহার করা দরকার ।
var bulk = db.collection.initializeUnorderedBulkOp();
var count = 0;
cursor.snapshot().forEach(function(document) {
bulk.find({ '_id': document._id }).updateOne( {
'$set': { 'name': document.name }
});
count++;
if(count%500 === 0) {
// Excecute per 500 operations and re-init
bulk.execute();
bulk = db.collection.initializeUnorderedBulkOp();
}
})
// clean up queues
if(count > 0) {
bulk.execute();
}
মঙ্গোডিবি 2.4
cursor["result"].forEach(function(document) {
db.collection.update(
{ "_id": document._id },
{ "$set": { "name": document.name } }
);
})