【发布时间】:2021-01-01 13:11:58
【问题描述】:
我使用 NodeJS、MongoDB 和 Mongoose。我将字段从字符串更改为字符串数组。一个月前,我有:
// Before.
const UserSchema = new Schema({
ip: String
});
从上周开始,我有:
// After.
const UserSchema = new Schema({
ips: [String]
});
由于我保存该字段的日常脚本,现在所有文档都没有字段ip。我假设当 NodeJS 加载用户对象时,它使用最新的模式;当它保存对象时,它会覆盖任何以前的文档。所以我希望之前的字段ip 不会在user.save() 的更新中继续存在。
这是真的吗?如果NodeJS只加载一个文档不保存,会不会保留原来的ip字段?
更新:按照建议的评论,我最终得到了一个包含两个版本的文档:
> db.users.find({ip: {$ne: null}}, {ip: 1, ips: 1}).pretty()
{ "_id" : ObjectId("5f065633404c3e4aaac69142"), "ip" : "::1" }
{
"_id" : ObjectId("5f30773f86a1993db449e1b3"),
"ip" : "::1",
"ips" : [
"::1"
]
}
如果它包含ips,那么它已经使用新模式保存了对象。所以我不明白原始字段ip何时被覆盖。
【问题讨论】:
-
测试一下就知道了?
标签: node.js mongodb mongoose mongoose-schema