কোনও মোঙ্গোডিবি ডকুমেন্ট থেকে ক্ষেত্রটি কীভাবে সম্পূর্ণ সরিয়ে ফেলবেন?


307
{ 
    name: 'book',
    tags: {
        words: ['abc','123'],
        lat: 33,
        long: 22
    }
}

মনে করুন এটি একটি নথি। wordsএই সংগ্রহের সমস্ত দস্তাবেজ থেকে আমি কীভাবে সম্পূর্ণ " " সরিয়ে ফেলব ? আমি চাই সমস্ত নথি " words" ছাড়াই থাকুক :

 { 
     name: 'book',
     tags: {
         lat: 33,
         long: 22
     }
}

উত্তর:


531

এটি ব্যবহার করে দেখুন: যদি আপনার সংগ্রহটি 'উদাহরণ' হয়ে থাকে

db.example.update({}, {$unset: {words:1}}, false, true);

এটি উল্লেখ করুন:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset

আপডেট :

উপরের লিঙ্কটি আর 'set আনসেট' না করে coversেকে রাখে। {multi: true}আপনি যদি সংগ্রহের সমস্ত দস্তাবেজ থেকে এই ক্ষেত্রটি সরাতে চান তবে যোগ করতে ভুলবেন না ; অন্যথায় এটি মিলবে এমন প্রথম দস্তাবেজ থেকে এটি কেবল সরিয়ে ফেলবে। আপডেট করা ডকুমেন্টেশনের জন্য এটি দেখুন:

https://docs.mongodb.com/manual/reference/operator/update/unset/

উদাহরণ:

db.example.update({}, {$unset: {words:1}} , {multi: true});

1
এই প্রশ্নের সমাধান মিথ্যা ব্যাখ্যার জন্য / সত্য দেখুন stackoverflow.com/questions/7714216/...
Dsel

1
আর এখন পর্যন্ত এই পৃষ্ঠাতে :) একটি "নিকের কট্রেল" যেকোনো স্থান দ্বারা একটি মন্তব্য নেই
ড্যান Dascalescu

6
আমি কিছু অনুপস্থিত করছি, অথবা 8+ বছর ধরে এই হয়েছে ভুল আছে, কারণ tags.wordsহওয়া উচিত $unset, তাই না words? সালভাদোর ডালির উত্তরও দেখুন।
ড্যান ড্যাসকলেসকু

1
আপনি এর updateManyপরিবর্তেও ব্যবহার করতে পারেন {multi:true}, অর্থাৎdb.example.updateMany({},{"$unset":{words:""}})
14:52

158

প্রথমদিকে, কেন আমি প্রশ্নটির অনুগ্রহ পেয়েছি তা পাইনি (আমি ভেবেছিলাম যে প্রশ্নের উত্তরের উত্তর আছে এবং যুক্ত করার মতো কিছুই নেই) তবে আমি লক্ষ্য করেছিলাম যে উত্তরটি 15 বার গৃহীত হয়েছিল এবং আপলোড করা হয়েছিল তা আসলেই ভুল ছিল!

হ্যাঁ, আপনাকে $unsetঅপারেটরটি ব্যবহার করতে হবে , তবে এই আনসেটটি শব্দের কীটি সরিয়ে ফেলবে যা কোনও সংকলনের জন্য কোনও দস্তাবেজের জন্য বিদ্যমান নেই। সুতরাং মূলত এটি কিছুই করবে না।

সুতরাং আপনাকে মোংগোকে ডকুমেন্ট ট্যাগগুলি এবং তারপরে ডট নোটেশন ব্যবহার করে শব্দগুলি দেখতে বলা উচিত । সুতরাং সঠিক জিজ্ঞাসা হয়।

db.example.update(
  {},
  { $unset: {'tags.words':1}},
  false, true
)

কেবলমাত্র সমাপ্তির খাতিরে, আমি এটি করার অন্য একটি উপায়ের বিষয়ে উল্লেখ করব , যা আরও খারাপ, তবে আপনি কোনও কাস্টম কোড (এমনকি এই দস্তাবেজ থেকে অন্য কোনও ক্ষেত্রের উপর ভিত্তি করে) দিয়ে ক্ষেত্রটি পরিবর্তন করতে পারেন।


2
এটি যুক্ত করে, ট্যাগগুলি যদি একটি অ্যারে হয় তবে তা এর মতো হবে: db.example.update ({}, {$ unset: tag 'ট্যাগ। $ []। শব্দ': 1}}, মিথ্যা, সত্য)
মানান শাহ

21
db.example.updateMany({},{"$unset":{"tags.words":1}})

আমরা একাধিক ডকুমেন্ট আপডেট করতে এটি ব্যবহার করতে পারি।


2
আমি false, trueশেষ দুটি আর্গ হিসাবে পাস করার চেয়ে আরও স্পষ্ট মনে করিupdate()
কিপ

17

মংগোডিবিতে ক্ষেত্রটি সরাতে বা মুছতে

  • একক রেকর্ডের জন্য

    db.getCollection('userData').update({}, {$unset: {pi: 1}})
  • মাল্টি রেকর্ডের জন্য

    db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})

2

আমি এর অনুরূপ কিছু করার চেষ্টা করছিলাম তবে এর পরিবর্তে এমবেডড ডকুমেন্ট থেকে কলামটি সরিয়ে ফেললাম। সমাধান পেতে আমাকে কিছুটা সময় নিয়েছে এবং এটিই আমি প্রথম পোস্টটি পেয়েছিলাম যাতে আমি ভাবলাম যে অন্য কারও জন্য এটি করার চেষ্টা করছে আমি এই পোস্ট করব।

সুতরাং এর পরিবর্তে আপনার ডেটাটি দেখতে বলে দিন:

{ 
  name: 'book',
  tags: [
    {
      words: ['abc','123'],
      lat: 33,
      long: 22
    }, {
      words: ['def','456'],
      lat: 44,
      long: 33
    }
  ]
}

wordsএম্বেড করা দস্তাবেজ থেকে কলামটি সরাতে , এটি করুন:

db.example.update(
  {'tags': {'$exists': true}},
  { $unset: {'tags.$[].words': 1}},
  {multi: true}
)

বা ব্যবহার করে updateMany

db.example.updateMany(
  {'tags': {'$exists': true}},
  { $unset: {'tags.$[].words': 1}}
)

$unsetশুধুমাত্র এটি সম্পাদনা যদি মান বিদ্যমান কিন্তু এটি একটি নিরাপদ গৌণ করব না (যদি এটি পরীক্ষা অভ্যস্ত tagsপ্রথম বিদ্যমান) যাতে বিদ্যমান এমবেডেড দস্তাবেজে প্রয়োজন হয়।

এটি সমস্ত অবস্থানিক অপারেটর ( $[]) ব্যবহার করে যা সংস্করণ 3.6 এ চালু হয়েছিল


1

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

সংস্করণ 3.6 এ পরিবর্তিত হয়েছে। বাক্য গঠন :

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

উদাহরণ:

db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})

আপনার উদাহরণে:

db.getCollection('products').update({},{$unset: {'tags.words' :1}},  {multi: true})

1

শুরু হচ্ছে Mongo 4.2, কিছুটা আলাদা সিনট্যাক্স ব্যবহার করাও সম্ভব:

// { name: "book", tags: { words: ["abc", "123"], lat: 33, long: 22 } }
db.collection.update({}, [{ $unset: ["tags.words"] }], { many: true })
// { name: "book", tags: { lat: 33, long: 22 } }

আপডেটের পদ্ধতি এছাড়াও একটি অ্যাগ্রিগেশন পাইপলাইন গ্রহণ করতে পারে (অ্যাগ্রিগেশন পাইপলাইন ব্যবহার বোধক স্কোয়ারড বন্ধনী নোট)।

এর অর্থ হ'ল $unsetঅপারেটরটি হ'ল সমষ্টি এক ( "ক্যোয়ারী" এর বিপরীতে ), যার বাক্য গঠনটি ক্ষেত্রগুলির একটি অ্যারে নেয়।



0

এবং মঙ্গোম্যাপারের জন্য,

  • দলিল: শাটফ
  • অপসারণের ক্ষেত্র: শাটঅফ_ টাইপ

Shutoff.collection.update( {}, { '$unset' => { 'shutoff_type': 1 } }, :multi => true )


0

যেহেতু আমি মোঙ্গোইজাইন ব্যবহার করে কোনও ক্ষেত্র সরানোর কোনও উপায় অনুসন্ধান করতে গিয়ে এই পৃষ্ঠাটি সন্ধান করেছি, আমার ধারণা, এটি মঙ্গোইজাইন উপায়ে পোস্ট করাও সহায়ক হতে পারে:

Example.objects.all().update(unset__tags__words=1)


-3

"শব্দ" আছে কিনা তা পরীক্ষা করে এবং তারপরে দস্তাবেজ থেকে সরানো হচ্ছে

    db.users.update({"tags.words" :{$exists: true}},
                                           {$unset:{"tags.words":1}},false,true);

সত্য মিলে গেলে একাধিক ডকুমেন্ট আপডেট করার ইঙ্গিত দেয়।


আপনার অস্তিত্বের জন্য পরীক্ষা করার দরকার নেই। ডকুমেন্টেশন রাজ্যের যে: "ক্ষেত্রের অস্তিত্ব নেই, তাহলে $ সেট না কিছুই (অর্থাত কোনো রকমে) করে। '
ড্যান ড্যাসকলেসকু

-4

আপনি এই প্রকল্পটি 3.4 এ ব্যবহার করে একীকরণেও করতে পারেন

$ $ প্রকল্প: tag "ট্যাগস.ওয়ার্ডস": 0}


-7

একটি প্যাকেজ রেফারেন্স করতে এবং বিভিন্ন "কী" মুছে ফেলার জন্য এটি চেষ্টা করে দেখুন

db['name1.name2.name3.Properties'].remove([
{
     "key" : "name_key1"
},
{
     "key" : "name_key2"
},
{
     "key" : "name_key3"
}
)]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.