2013-08-08 13 views
11

私はスキーマにネストされた配列を持っていますが、MongoDBに特定のモデルのエントリを削除するように指示するにはどうすればいいですか?MongoDB - ネストされた配列内のアイテムをクリアする

スキーマ

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

私はこのような何か試してみました:

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

をしかし、ネストされた配列内の項目が残っています。

答えて

22

$ pullAllは配列から削除する必要がある項目のリストを必要とするため、コードが機能しません。空の配列を渡しているので、何も削除されません。

あなたは単に代わりに、すべての項目を削除するの空の配列に文書を設定することができます。

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

あなたは「トム」はそれを持っていない場合は、文書の配列を作成しないようにしたい場合は、文書を選択する際に、配列が存在するかどうかを確認更新する:

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

UPDATE:

db.users.update({username: "tom"}, {$pull: {documents: {$exists: true}}}) 
:すべての配列項目を削除する別のオプションは、$すべての文書を満たすクエリを引くを使用することですが
関連する問題