মঙ্গোডিবি: একক কমান্ড দিয়ে একাধিক নথি কীভাবে আপডেট করবেন?


144

আমি অবাক হয়ে দেখলাম যে নিম্নলিখিত উদাহরণ কোডটি কেবল একটি ডকুমেন্টকে আপডেট করে:

> db.test.save({"_id":1, "foo":"bar"});
> db.test.save({"_id":2, "foo":"bar"});

> db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}});

> db.test.find({"test":"success!"}).count();
1

আমি জানি আমি সমস্ত লুপ করতে পারি এবং সেগুলি পরিবর্তন না হওয়া অবধি আপডেট চালিয়ে যেতে পারি, তবে এটি মারাত্মকভাবে অদক্ষ বলে মনে হয়। একটি ভাল উপায় আছে কি?

উত্তর:


247

একাধিক আপডেট সম্প্রতি যুক্ত করা হয়েছে, সুতরাং এটি কেবলমাত্র উন্নয়ন রিলিজগুলিতে উপলব্ধ (1.1.3)। শেল থেকে আপনি trueচতুর্থ আর্গুমেন্ট হিসাবে পাস করে একাধিক আপডেট করেন update()যেখানে তৃতীয় আর্গুমেন্টটি যুক্তিযুক্ত যুক্তি:

db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);

মঙ্গডব ২.২+ এর সংস্করণগুলির জন্য আপনাকে একসাথে একাধিক ডকুমেন্ট আপডেট করতে বিকল্প মাল্টি ট্রু সেট করতে হবে।

db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})

মঙ্গডব ৩.২+ এর সংস্করণগুলির জন্য আপনি updateMany()পৃথক multiবিকল্পের প্রয়োজন ছাড়াই একসাথে একাধিক নথি আপডেট করতে নতুন পদ্ধতি ব্যবহার করতে পারেন ।

db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})

3
আমি কখনই এই পরিবর্তনটি হয়েছিল তা সম্পর্কে নিশ্চিত নই তবে, মংডব ভিপি ২.২.২ এটি কিছুটা আলাদাভাবে করে। db.collection.update (<ক্যুয়ারি>, <update>, <options>) যেখানে বিকল্পগুলি মূল মান জোড়গুলির একটি সেট। ডকুমেন্টেশন দেখুন: ডকস.মোংডব.অর্গ
অ্যাপ্লিকেশনস

3
আমি যদি বিভিন্ন নথিতে বিভিন্ন মান সেট করতে চাই? এটি করার একটি সুন্দর উপায় আছে?
zach

পুরানো মূল্য + "কিছু স্ট্রিং" এর জন্য এটি কীভাবে করবেন
মহেশ কে

34

V3.3 থেকে শুরু করে আপনি আপডেটম্যানি ব্যবহার করতে পারেন

db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)

V2.2 এ, আপডেট ফাংশনটি নিম্নলিখিত ফর্মটি গ্রহণ করে:

 db.collection.update(
   <query>,
   <update>,
   { upsert: <boolean>, multi: <boolean> }
)

https://docs.mongodb.com/manual/reference/method/db.collection.update/


16

জন্য মোঙ্গো সংস্করণ> 2.2 , একটি ক্ষেত্র বহু যোগ করতে পারেন এবং সত্যতে এটি সেট

db.Collection.update({query}, 
                 {$set: {field1: "f1", field2: "f2"}},
                 {multi: true })

7

আমি আরও ভাল ইন্টারফেস দিয়ে এটি করার একটি উপায় তৈরি করেছি।

  • db.collection.find({ ... }).update({ ... }) - মাল্টি আপডেট
  • db.collection.find({ ... }).replace({ ... }) - একক প্রতিস্থাপন
  • db.collection.find({ ... }).upsert({ ... }) - একক উপায়ে
  • db.collection.find({ ... }).remove() - বহু অপসারণ

আপনি সীমাবদ্ধতা প্রয়োগ করতে পারেন, এড়িয়ে চলুন, আপডেটগুলিতে সকার করুন এবং এগুলি পূর্বে শৃঙ্খলাবদ্ধ করে মুছে ফেলতে পারেন।

আপনি যদি আগ্রহী হন তবে মঙ্গো-হ্যাকারটি দেখুন


1
TypeError: db.get Colલેક્શન (...) সন্ধান করুন (...) আপডেট আপডেট কোনও ফাংশন নয়:?
অ্যান্টনি

কাজ করেননি db.userActivity.find({ 'appId' : 1234, 'status' : 1}).update({ $set: { 'status': 1 } }); 2017-06-05T17:47:10.038+0530 E QUERY [thread1] TypeError: db.userActivity.find(...).update is not a function :
প্রকাশ পান্ডে

4

মঙ্গোডিবি ক্লায়েন্টে টাইপ করুন:

db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})

সংস্করণে নতুন 3.2

প্যারাম ::

{}:  select all records updated

কীওয়ার্ড যুক্তি multiনেওয়া হয়নি


3

মঙ্গোডিবি কেবলমাত্র একটি মিলবে এমন নথি খুঁজে পাবে যা আপনি আপডেট কমান্ড জারি করার সময় ক্যোয়ারির মানদণ্ডের সাথে মেলে, যে কোনও নথির সাথে প্রথম মিল হয় তা আপডেট হওয়ার পরেও দেখা যায়, মানদণ্ডের সাথে মেলে এমন আরও নথি থাকলেও তা উপেক্ষা করা হবে।

সুতরাং এটি থেকে উত্তরণের জন্য আমরা আপনার আপডেট বিবৃতিতে "MULTI" বিকল্পটি নির্দিষ্ট করতে পারি, যার অর্থ ক্যোয়ারির মানদণ্ডের সাথে মেলে এমন সমস্ত ডকুমেন্ট আপডেট করুন। সংগ্রহের সমস্ত ডকুমেন্টের জন্য স্ক্যান করুন যা মানদণ্ডের সাথে মেলে এবং আপডেটগুলি:

db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )

2

নিম্নলিখিত কমান্ডটি সংগ্রহের একাধিক রেকর্ড আপডেট করতে পারে

db.collection.update({}, 
{$set:{"field" : "value"}}, 
{ multi: true, upsert: false}
)

1

আমারও একই সমস্যা ছিল এবং আমি সমাধানটি খুঁজে পেয়েছি এবং এটি একটি কবজির মতো কাজ করে

পতাকাটিকে একাধিক সত্য হিসাবে সেট করুন:

 db.Collection.update(
                {_id_receiver: id_receiver},
               {$set: {is_showed: true}},
                {multi: true}   /* --> multiple update */
            , function (err, updated) {...});

আমি আশা করি এটি সাহায্য করবে :)


1

সম্পূর্ণ সংগ্রহ আপডেট করার জন্য,

db.getCollection('collection_name').update({},
{$set: {"field1" : "value1", "field2" : "value2", "field3" : "value3"}},
{multi: true })

0

আপনি ব্যবহার করতে পারেন

        Model.update({
            'type': "newuser"
        }, {
            $set: {
                email: "abc@gmail.com",
                phoneNumber:"0123456789"
            }
        }, {
            multi: true
        },
        function(err, result) {
            console.log(result);
            console.log(err);
        })  `

0

মংডোব আপডেটের সর্বশেষতম সংস্করণগুলি অনেকগুলি () ভাল কাজ করছে

db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});

-1

এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ, আমি ২.6..7 ব্যবহার করেছি এবং নিম্নলিখিত কোয়েরিটি সবেমাত্র কাজ করেছে,

সমস্ত দস্তাবেজের জন্য:

db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:true})

একক দস্তাবেজের জন্য:

db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:false})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.