এই কাজ করতে সবচেয়ে ভালো উপায় সংস্করণ 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 } }
);
})