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

これがドキュメントだとします。wordsこのコレクションのすべてのドキュメントから「」を完全に削除するにはどうすればよいですか?すべてのドキュメントに「words」を付けないようにしたい:

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

16 に答える 16

683

これを試してください:あなたのコレクションが「例」だった場合

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

これを参照してください:

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

更新

上記のリンクは、「$unset」をカバーしなくなりました。{multi: true}コレクション内のすべてのドキュメントからこのフィールドを削除する場合は、必ず追加してください。それ以外の場合は、最初に見つかった一致するドキュメントからのみ削除されます。更新されたドキュメントについては、次を参照してください。

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

例:

db.example.update({}, {$unset: {words:1}} , {multi: true});
于 2011-07-27T22:32:27.917 に答える
22

MongoDB でフィールドを削除または削除するには

  • シングルレコードの場合

    db.getCollection('userData').update({}, {$unset: {pi: 1}})
    
  • マルチレコード用

    db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
    
于 2016-05-21T09:36:35.610 に答える
11

からはMongo 4.2、少し異なる構文を使用することもできます。

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

updateメソッドは集約パイプラインを受け入れることができるため(角括弧は集約パイプラインの使用を意味することに注意してください)、ここで使用される演算子は ( 「クエリ」$unset演算子とは対照的に) 集約演算子であることを意味し、その構文は次の配列を取ります。田畑。

于 2019-06-23T06:19:37.793 に答える
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 で導入されたすべての位置演算子( ) を使用します。$[]

于 2019-04-11T13:39:54.650 に答える
2

mongoDB シェルでは、次のコードが役立つ場合があります。

db.collection.update({}, {$unset: {fieldname: ""}} )
于 2021-01-09T11:03:30.910 に答える
1

デフォルトでは、update() メソッドは 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})
于 2018-08-09T18:07:46.267 に答える
-2

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

答え:

db.tablename.remove({'tags.words':['abc','123']})

于 2018-10-30T06:28:52.200 に答える
-7

パッケージを参照してさまざまな「キー」を削除するには、これを試してください

db['name1.name2.name3.Properties'].remove([
{
     "key" : "name_key1"
},
{
     "key" : "name_key2"
},
{
     "key" : "name_key3"
}
)]
于 2015-04-24T16:41:57.713 に答える