我的架构如下: -
var Schema1 = new mongoose.Schema({
name: String,
description: String,
version: [{
id: String,
status: Number
}]
});
我想取消设置版本字段。我尝试以下代码: -
Schema1.update({}, {
$unset: {
version: 1
}
}, {
multi: true
}).exec(function(err, count) {
console.log(err, count)
});
它给了我以下输出: -
null 10
但输出包含版本字段: -
{
name : 'a',
description : 'sdmhf',
version : []
}
上面的代码删除了数据但我想从我的集合中删除版本字段。你能告诉我怎么做吗?
答案 0 :(得分:7)
您的代码没有任何问题。 Mongoose实际上删除了文档中的那些字段(我假设是你所期望的)。您可以通过在数据库中打开mongo shell并在更新之前和之后搜索所有文档来查看(使用db.yourcollection.find({})
)
为什么即使从集合中的每个文档中删除一个空数组,它仍然会出现? Mongoose将确保返回的文档将遵循您定义的架构。因此,即使Mongoose在实际文档中没有找到指向数组的version
属性,当返回匹配的文档时,它仍然会显示一个空数组。
您可以通过向架构添加一些任意属性(指向数组)并再次运行.find({})
来自行验证。您将看到Mongoose将在每个文档中返回这些属性,即使您从未将它们保存到数据库中。同样,如果你添加像字符串,布尔值等非数组属性,只要你指定一个默认值,Mongoose就会返回它们。
如果你想永久删除version
(正如你在评论中提到的那样),你可以在完成$ unset后从Mongoose模式中删除它。
答案 1 :(得分:0)
这对我有用
doc.field = undefined
await doc.save()