如何解决何时删除MongoDB文档中不推荐使用的字段?
我使用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
何时被覆盖。
解决方法
经过一番戳后,不赞成使用的字段不会被删除,但是由于架构中缺少它,我无法从NodeJS访问它。这是静态方法的示例:
df = pd.DataFrame([{'date': i['date'],'message': i['message']} for i in data if i.get('message')])
date message
2020-09-03T14:51:03+00:00 Looking for product managers / engineers who have worked in search engine / query understanding space. Please PM me if you can connect me to someone for the same
结果是:
IP = undefined user = { _id: 5f4e7...,ip: '::ffff:...',... }
因此,不赞成使用的字段没有被删除。当我将其重新添加到Mongoose模式中时,便能够从NodeJS代码中再次访问它。
,只需使用ips
方法将新的ip添加到push
字段中。看这个例子
const user = require('../your model');
const findingUser = await user.findOne(id);
const updateUser = findingUser.ips.push(newIp);
updateUser.save()
现在它不会覆盖,而是添加新IP。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。