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