2013-08-08 30 views
11

Şemada yuvalanmış bir dizim varsa, MongoDB'ye belirli bir model için girdilerini kaldırmasını nasıl söylerim?MongoDB - İç içe geçmiş bir dizideki öğeleri temizleme

var UserSchema = new Schema({ 
    username: String, 
    documents: [Number] 
}); 

şema böyle bir şey denedim:

db.users.update({"username": "tom"}, {"$pullAll": {"documents": []}}) 

Fakat iç içe dizideki öğeler hala orada.

cevap

22

$ drawAll diziden kaldırılması gereken öğelerin listesini gerektirdiğinden, kodunuz çalışmıyor. Boş diziyi geçiyorsunuz, böylece hiçbir şey kaldırılmaz.

Sadece boş diziye yerine tüm öğeleri kaldırarak belgelerini ayarlayabilirsiniz: Eğer "tom" o zaman, buna sahip kontrol yoksa dizi dokümanı seçerek varsa belgeler dizisi oluşturmaktan kaçınmak istiyorsanız

db.users.update({"username": "tom"}, {"$set": {"documents": []}}) 

güncellemek için:

db.users.update({username: "tom", documents: {$exists: true}}, 
       {$set: {documents: []}}) 

gÜNCELLEME:

db.users.update({username: "tom"}, {$pull: {documents: {$exists: true}}}) 
: tüm dizi öğeleri kaldırmak için başka seçenek tüm belgeleri karşılayan hangi sorgu ile çek $ kullanmaktır