Yanıtlar:
Bunu deneyin: Koleksiyonunuz 'örnek' ise
db.example.update({}, {$unset: {words:1}}, false, true);
Şuna bakın:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
GÜNCELLEME :
Yukarıdaki bağlantı artık '$ unset' işlemini kapsamıyor. {multi: true}
Bu alanı koleksiyondaki tüm belgelerden kaldırmak istiyorsanız eklediğinizden emin olun ; aksi takdirde, yalnızca eşleşen ilk belgeden kaldırılır. Güncellenmiş belgeler için buna bakın:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Misal:
db.example.update({}, {$unset: {words:1}} , {multi: true});
tags.words
olmalı $unset
, değil words
mi? Salvador Dali'nin cevabına da bakınız.
updateMany
yerine kullanabilirsiniz {multi:true}
, yanidb.example.updateMany({},{"$unset":{words:""}})
Başlangıçta, sorunun neden bir ödülü olduğunu anlamadım (sorunun güzel bir cevabı olduğunu ve eklenecek bir şey olmadığını düşündüm), ancak daha sonra 15 kez kabul edilen ve iptal edilen cevabın gerçekten yanlış olduğunu fark ettim!
Evet, $unset
işleci kullanmanız gerekir , ancak bu ayar, bir koleksiyona ait belge için var olmayan kelime anahtarını kaldıracaktır. Temelde hiçbir şey yapmaz.
Bu yüzden Mongo'ya belge etiketlerine ve sonra nokta gösterimini kullanarak sözcüklere bakmasını söylemeniz gerekir . Yani doğru sorgu.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
Sadece tamamlama uğruna, bunu yapmanın başka bir yoluna atıfta bulunacağım , bu çok daha kötüdür, ancak bu şekilde alanı herhangi bir özel kodla (bu belgedeki başka bir alana dayanarak bile) değiştirebilirsiniz.
MongoDB'deki alanı kaldırmak veya silmek için
Tek Kayıt için
db.getCollection('userData').update({}, {$unset: {pi: 1}})
Çoklu Kayıt için
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
Buna benzer bir şey yapmaya çalışıyordum, ancak bunun yerine gömülü bir belgeden sütunu kaldırdım. Bir çözüm bulmak biraz zaman aldı ve bu ilk karşılaştığım gönderiydi, bu yüzden aynı şeyi yapmaya çalışan herkes için buraya göndereceğimi düşündüm.
Diyelim ki verileriniz şöyle görünüyor:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
Sütunu words
katıştırılmış belgeden kaldırmak için şunu yapın :
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
veya kullanarak updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
$unset
Değeri varsa sadece düzenlemek olacaktır ancak (eğer kontrol alışkanlık güvenli bir navigasyon yapmayacağım tags
gömülü belge üzerinde gerekli olan Varlığından bu yüzden ilk var).
Bu, 3.6 sürümünde tanıtılan tüm konumlandırma işlecini ( $[]
) kullanır
Varsayılan olarak, update () yöntemi tek bir belgeyi güncelleştirir. Sorgu ölçütleriyle eşleşen tüm belgeleri güncellemek için Çoklu Parametreyi ayarlayın.
3.6 sürümünde değiştirildi. Sözdizimi:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
Misal :
db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
Örneğinizde:
db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true})
İlk olarak Mongo 4.2
, biraz farklı bir sözdizimi kullanmak da mümkündür:
// { 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 } }
Güncelleştirme ayrıca toplama boru hattını kabul edebilir yöntemi (bir toplanma boru hattının kullanılmasını belirten kare parantez unutmayın).
Bu $unset
, kullanılan operatörün , sözdizimi bir alan dizisi alan birleştirme ( "sorgu" sorgusu yerine) olduğu anlamına gelir .
PyMongo (Python mongo) için çözüm:
db.example.update({}, {'$unset': {'tags.words':1}}, multi=True);
MongoEngine kullanarak bir alanı kaldırmak için bir yol ararken bu sayfayı bulmaya devam ettiğim için, burada da MongoEngine yolunu göndermek için yararlı olabilir sanırım:
Example.objects.all().update(unset__tags__words=1)
{name: 'book', etiketler: {words: ['abc', '123'], lat: 33, uzun: 22}}
Ans:
db.tablename.remove ({ 'tags.words': [ 'ABC', '123']})
"Kelimeler" olup olmadığını kontrol etme ve ardından belgeden kaldırma
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
true, eşleşirse birden çok belgenin güncellenmesini gösterir.