Jawaban:
Coba ini: Jika koleksi Anda adalah 'contoh'
db.example.update({}, {$unset: {words:1}}, false, true);
Lihat ini:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
PEMBARUAN :
Tautan di atas tidak lagi mencakup '$ tidak disetel'. Pastikan untuk menambahkan {multi: true}
jika Anda ingin menghapus bidang ini dari semua dokumen dalam koleksi; jika tidak, itu hanya akan menghapusnya dari dokumen pertama yang cocok. Lihat ini untuk dokumentasi yang diperbarui:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Contoh:
db.example.update({}, {$unset: {words:1}} , {multi: true});
tags.words
seharusnya $unset
, bukan words
? Lihat juga jawaban Salvador Dali.
updateMany
sebagai gantinya {multi:true}
, yaitudb.example.updateMany({},{"$unset":{words:""}})
Pada awalnya, saya tidak mengerti mengapa pertanyaan itu memiliki karunia (saya pikir pertanyaan itu memiliki jawaban yang bagus dan tidak ada yang perlu ditambahkan), tetapi kemudian saya perhatikan bahwa jawaban yang diterima dan di-upgrade sebanyak 15 kali sebenarnya salah!
Ya, Anda harus menggunakan $unset
operator , tetapi ini tidak disetel akan menghapus kata kunci yang tidak ada untuk dokumen untuk koleksi. Jadi pada dasarnya itu tidak akan melakukan apa-apa.
Jadi, Anda perlu memberi tahu Mongo untuk melihat tag dokumen dan kemudian menggunakan notasi titik . Jadi permintaan yang benar adalah.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
Demi penyelesaian, saya akan merujuk ke cara lain untuk melakukannya , yang jauh lebih buruk, tetapi dengan cara ini Anda dapat mengubah bidang dengan kode khusus apa pun (bahkan berdasarkan bidang lain dari dokumen ini).
Untuk menghapus atau menghapus bidang di MongoDB
Untuk Rekaman tunggal
db.getCollection('userData').update({}, {$unset: {pi: 1}})
Untuk Multi Rekam
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
Saya mencoba melakukan sesuatu yang mirip dengan ini tetapi bukannya menghapus kolom dari dokumen yang disematkan. Butuh beberapa saat untuk menemukan solusi dan ini adalah posting pertama yang saya temui jadi saya pikir saya akan memposting ini di sini untuk orang lain yang mencoba melakukan hal yang sama.
Jadi katakanlah sebaliknya, data Anda terlihat seperti ini:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
Untuk menghapus kolom words
dari dokumen yang disematkan, lakukan ini:
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
atau menggunakan updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
Hanya $unset
akan mengeditnya jika nilainya ada tetapi tidak akan melakukan navigasi yang aman (itu tidak akan memeriksa jika tags
ada terlebih dahulu) sehingga ada diperlukan pada dokumen tertanam.
Ini menggunakan semua operator posisi ( $[]
) yang diperkenalkan di versi 3.6
Secara default, metode pembaruan () memperbarui satu dokumen. Setel Multi Parameter untuk memperbarui semua dokumen yang sesuai dengan kriteria kueri.
Diubah dalam versi 3.6. Sintaks:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
Contoh:
db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
Dalam contoh Anda:
db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true})
Mulai Mongo 4.2
, mungkin juga menggunakan sintaks yang sedikit berbeda:
// { 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 } }
The pembaruan metode juga dapat menerima pipa agregasi (perhatikan kurung kuadrat menandakan penggunaan pipa agregasi).
Ini berarti $unset
operator yang digunakan adalah agregasi (sebagai lawan dari kueri "" ), yang sintaksnya mengambil array bidang.
Solusi untuk PyMongo (Python mongo):
db.example.update({}, {'$unset': {'tags.words':1}}, multi=True);
Karena saya terus menemukan halaman ini ketika mencari cara untuk menghapus bidang menggunakan MongoEngine, saya kira mungkin bermanfaat untuk memposting cara MongoEngine di sini juga:
Example.objects.all().update(unset__tags__words=1)
{name: 'book', tag: {kata-kata: ['abc', '123'], lat: 33, panjang: 22}}
Jawab:
db.tablename.remove ({'tags.words': ['abc', '123']})
Memeriksa apakah "kata" ada dan kemudian menghapus dari dokumen
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
true menunjukkan pembaruan beberapa dokumen jika cocok.