মংগোডিবি সংগ্রহের প্রতিটি দস্তাবেজে নতুন ক্ষেত্র যুক্ত করুন


334

অস্তিত্বের সংগ্রহে প্রতিটি নথিতে আমি কীভাবে একটি নতুন ক্ষেত্র যুক্ত করতে পারি?

আমি জানি যে কীভাবে বিদ্যমান নথির ক্ষেত্রটি আপডেট করতে হয় তবে সংগ্রহের প্রতিটি নথিতে কীভাবে নতুন ক্ষেত্র যুক্ত করতে হয় না। আমি কিভাবে mongoশেল এটি করতে পারি ?

উত্তর:


598

বিদ্যমান সংগ্রহ ক্ষেত্রটি আপডেট $setকরার সাথে সাথে নির্দিষ্ট ক্ষেত্রটি উপস্থিত না থাকলে একটি নতুন ক্ষেত্র যুক্ত করবে।

এই উদাহরণটি দেখুন:

> db.foo.find()
> db.foo.insert({"test":"a"})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> item = db.foo.findOne()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }

সম্পাদনা করুন:

আপনি যদি আপনার সমস্ত সংগ্রহে একটি নতুন_ফিল্ড যুক্ত করতে চান তবে আপনাকে খালি নির্বাচক ব্যবহার করতে হবে এবং সমস্ত ডকুমেন্ট আপডেট করার জন্য একাধিক পতাকা সত্য (শেষ প্যারাম) এ সেট করতে হবে

db.your_collection.update(
  {},
  { $set: {"new_field": 1} },
  false,
  true
)

সম্পাদনা করুন:

উপরের উদাহরণে সর্বশেষ 2 টি ক্ষেত্রগুলি এবং পতাকাগুলি false, trueনির্দিষ্ট করে । upsertmulti

উপস্থাপন করুন: যদি সত্যে সেট করা থাকে, কোনও দস্তাবেজ ক্যোয়ারীর মানদণ্ডের সাথে মেলে না এমন একটি নতুন ডকুমেন্ট তৈরি করে।

একাধিক: যদি সত্যে সেট করা থাকে, একাধিক ডকুমেন্ট আপডেট করে যা ক্যোয়ারীর মানদণ্ডে মেলে। যদি মিথ্যাতে সেট করা থাকে তবে একটি দস্তাবেজ আপডেট করুন।

এটি মঙ্গোর versionsআগে ছিল 2.2। সর্বশেষ সংস্করণগুলির জন্য ক্যোয়ারীটি কিছুটা পরিবর্তন করা হয়েছে

db.your_collection.update({},
                          {$set : {"new_field":1}},
                          {upsert:false,
                          multi:true}) 

7
মান ছাড়াই তৈরি করা কি সম্ভব
ইয়াসার আরাফাত

7
db.your_collection.update ({}, {$ set: {"new_field": নাল}}, sert উপস্থাপনা: মিথ্যা, বহু: সত্য})
নিলেশ

1
যদি আমি একটি ফাঁকা অ্যারে তৈরি করতে চাই?
প্রশান্ত পোখরিয়াল

3
@ প্রশান্তপোকরিয়াল ডিবি.ইউর_কলেকশন.আপডেট ({}, {$ সেট: {"নতুন_ফিল্ড": []}}, sert উপস্থাপনা: মিথ্যা, বহু: সত্য})
ম্যাক্সিমা আলেকজ

3
আপনি যদি গতিশীলভাবে নির্ধারিত মান সহ নতুন ক্ষেত্রটি তৈরি করতে চান? উদাহরণস্বরূপ, আমি ফিল্ডের new_fieldস্ট্রিংয়ের দৈর্ঘ্যের সমান একটি int হতে চাই test
কেইড

2

স্পষ্ট করার জন্য, সিনট্যাক্সটি মঙ্গোডিবি সংস্করণ 4.0.x এর জন্য নিম্নরূপ:

db.collection.update({},{$set: {"new_field*":1}},false,true)

নিবন্ধ সংগ্রহের জন্য একটি প্রকাশিত ক্ষেত্র যুক্ত করা এবং ক্ষেত্রের মানটি সত্য হিসাবে নির্ধারণ করা এখানে একটি কার্যকারী উদাহরণ রয়েছে :

db.articles.update({},{$set: {"published":true}},false,true)

0

পাইমঙ্গো ৩.৯++

update()বর্তমানে অবচিত হয়েছে এবং আপনার ব্যবহার করা উচিত replace_one(), update_one()অথবা update_many()পরিবর্তে।

আমার ক্ষেত্রে আমি ব্যবহার করেছি update_many()এবং এটি আমার সমস্যার সমাধান করেছে:

db.your_collection.update_many({}, {"$set": {"new_field": "value"}}, upsert=False, array_filters=None)

নথি থেকে

update_many(filter, update, upsert=False, array_filters=None, bypass_document_validation=False, collation=None, session=None)


filter: A query that matches the documents to update.

update: The modifications to apply.

upsert (optional): If True, perform an insert if no documents match the filter.

bypass_document_validation (optional): If True, allows the write to opt-out of document level validation. Default is False.

collation (optional): An instance of Collation. This option is only supported on MongoDB 3.4 and above.

array_filters (optional): A list of filters specifying which array elements an update should apply. Requires MongoDB 3.6+.

session (optional): a ClientSession.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.