如果我的模式中有一个嵌套数组,我如何告诉 MongoDB 删除其特定模型的条目?
架构
var UserSchema = new Schema({
username: String,
documents: [Number]
});
我试过这样的事情:
db.users.update({"username": "tom"}, {"$pullAll": {"documents": []}})
但是嵌套数组中的项目仍然存在。
如果我的模式中有一个嵌套数组,我如何告诉 MongoDB 删除其特定模型的条目?
架构
var UserSchema = new Schema({
username: String,
documents: [Number]
});
我试过这样的事情:
db.users.update({"username": "tom"}, {"$pullAll": {"documents": []}})
但是嵌套数组中的项目仍然存在。
您的代码不起作用,因为 $pullAll 需要应从数组中删除的项目列表。您正在传递空数组,因此不会删除任何内容。
您可以简单地将文档设置为空数组,而不是删除所有项目:
db.users.update({"username": "tom"}, {"$set": {"documents": []}})
如果要避免在“tom”没有它的情况下创建文档数组,则在选择要更新的文档时检查数组是否存在:
db.users.update({username: "tom", documents: {$exists: true}},
{$set: {documents: []}})
更新:删除所有数组项的另一个选项是将 $pull 与满足所有文档的查询一起使用:
db.users.update({username: "tom"}, {$pull: {documents: {$exists: true}}})