{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
これが文書だとしましょう。このコレクションのすべての文書から "words
"を完全に削除する方法を教えてください。すべての文書に "words
"を付けないようにします。
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
これを試してみてください。あなたのコレクションが「例」だった場合
db.example.update({}, {$unset: {words:1}}, false, true);
これを参照してください。
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
UPDATE:
上記のリンクは '$ unset'をカバーしていません。コレクション内のすべてのドキュメントからこのフィールドを削除する場合は、必ず{multi: true}
を追加してください。それ以外の場合は、一致すると最初に見つかったドキュメントからのみ削除されます。最新のドキュメントはこちらをご覧ください。
https://docs.mongodb.com/manual/reference/operator/update/unset/
例:
db.example.update({}, {$unset: {words:1}} , {multi: true});
最初は、なぜその質問に恩恵があるのかわかりませんでしたが(質問にはいい答えがあり、追加するものは何もないと思いました)、それから15回受け入れられて投票された答えが実際に間違っていることに気付きました。
はい、あなたは $unset
operator を使用しなければなりません、しかしこのアンセットはコレクションのドキュメントに存在しないwordsキーを削除しようとしています。だから基本的には何もしません。
そのため、Mongoにドキュメントタグを調べ、次に ドット表記 を使って単語を調べるように指示する必要があります。正しいクエリはそうです。
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
完了のためだけに、 別のやり方 を参照します。これはさらに悪いことですが、この方法では、カスタムコードを使用してフィールドを変更できます(このドキュメントの別のフィールドに基づいても)。 ).
MongoDBのフィールドを削除または削除する
シングルレコード用
db.getCollection('userData').update({}, {$unset: {pi: 1}})
マルチレコード用
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
db.example.updateMany({},{"$unset":{"tags.words":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 } }
pdate メソッドは、集約パイプラインを受け入れることもできます(集約パイプラインの使用を示す角括弧に注意してください)。
つまり、使用されている $unset
演算子は集約構文( "query" one とは対照的)であり、その構文はフィールドの配列を取ります。
私はこれに似たことをしようとしていましたが、代わりに埋め込み文書から列を削除しました。解決策を見つけるのにしばらく時間がかかりましたが、これが私が出会った最初の投稿だったので、同じことを試みる他の人のためにここに投稿することにしました。
だから代わりにあなたのデータはこのように見えると言うことができます:
{
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で導入された all position operator ($[]
)を使用します。
そしてモンゴマッパーのために、
Shutoff.collection.update( {}, { '$unset' => { 'shutoff_type': 1 } }, :multi => true )
デフォルトでは、update()メソッドは単一の文書を更新します。クエリ基準に一致するすべてのドキュメントを更新するようにマルチパラメータを設定します。
バージョン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})
{名前: 'book'、タグ:{単語:['abc'、 '123']、緯度:33、長さ:22}}
回答:
db.tablename.remove({'tags.words':['abc'、 '123']})