MongoDB - 清除嵌套数组中的项目

时间:2013-08-08 22:20:42

标签: mongodb

如果我的架构中有嵌套数组,我如何告诉MongoDB删除特定模型的条目?

模式

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

我试过这样的事情:

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

但是嵌套数组中的项目仍然存在。

1 个答案:

答案 0 :(得分:32)

您的代码无效,因为$ pullAll需要应从数组中删除的项目列表。您正在传递空数组,因此不会删除任何内容。

您只需将文档设置为空数组,而不是删除所有项目:

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

如果你想避免创建文档数组,如果" tom"没有它,然后在选择要更新的文档时检查数组是否存在:

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

更新:删除所有数组项的另一个选项是使用$ pull with query来满足所有文档:

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