gpt4 book ai didi

node.js - $unset 在 Mongoose 中不起作用

转载 作者:可可西里 更新时间:2023-11-01 09:57:20 27 4
gpt4 key购买 nike

我的架构如下:-

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 : []
}

上面的代码删除了数据,但我也想从我的集合中删除版本字段。你能告诉我该怎么做吗?

最佳答案

您的代码没有任何问题。 Mongoose 实际上是在删除文档中的那些字段(我假设这是您所期望的)。您可以通过在数据库中打开一个 mongo shell 并在更新前后搜索所有文档来查看(使用 db.yourcollection.find({}))

为什么即使从集合中的每个文档中删除一个空数组,它仍然出现? Mongoose 将确保返回的文档符合您定义的模式。因此,即使 Mongoose 在实际文档中找不到指向数组的 version 属性,在返回匹配文档时它仍然会显示一个空数组。

您可以通过向您的模式添加一些任意属性(指向一个数组)并再次运行 .find({}) 来自己验证这一点。您会看到 Mongoose 将在每个文档中返回这些属性,即使您从未将它们保存到数据库中。同样,如果您添加非数组属性,如字符串、 bool 值等,只要您指定默认值,Mongoose 就会返回这些属性。

如果您想永久删除 version(正如您在评论中提到的),您可以在完成 $unset 后将其从 Mongoose 模式中删除。

关于node.js - $unset 在 Mongoose 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23909146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com