更新架构声明后,Mongoose 不会更新新字段
Posted
技术标签:
【中文标题】更新架构声明后,Mongoose 不会更新新字段【英文标题】:Mongoose won't update new field after updating schema declaration 【发布时间】:2015-12-15 04:35:27 【问题描述】:我刚刚注意到,当我更新我的架构定义并添加一个字段时,例如“名称:字符串”,然后尝试使用
People.update( _id: user_id , $set: name: 'something' )
mongoose 不会更新我的属性。
我不断收到 nModified: 0 的响应。
我发现修复它的唯一方法是删除集合,然后新文档将完美运行。
我错过了什么吗? mongoose 是否以某种方式“缓存”了 mongodb 本身的集合模式,然后需要“删除”以“重新加载”属性?
【问题讨论】:
不,MongoDB 中没有存储模式定义。但是,如果您将属性设置为已经存在的值,mongodb 将报告 0 已修改,因为没有可修改的内容。您还说您正在更新架构定义,但是您是否在更改之间重新启动应用程序?您是否启用了此处未提及的其他插件。确定的最好方法是启用调试 `mongoose.set("debug",true)。然后您将查看发送的方法调用是否与您正在调用的不同。但请先检查其他事项。 【参考方案1】:我认为 findbyidandupdate 会为您完成任务。试试这个链接
Mongoose - findByIdAndUpdate - doesn't work with req.body
【讨论】:
【参考方案2】:您能否分享您的人物模型,也请使用回调更新。
见下文,工作正常..
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var User = mongoose.model('User', email: String, name: String );
//First added only email and used save to save the document.
//var user = new User( email: 'john.due@example.com' );
User.update( _id: '55fbbb268e7307dc0bf9ae92' , $set: name: 'John Due' , function(err, result)
if(err) throw err;
console.log(result)
);
【讨论】:
当设置为某个 _id 时它工作正常,但是当它设置为“null”或“undefined”时,它并没有为我更新。更新说 nModified 0 在删除集合并再次创建它之后它可以工作,这让我感到困惑和担心,因为我无法在生产中删除集合。以上是关于更新架构声明后,Mongoose 不会更新新字段的主要内容,如果未能解决你的问题,请参考以下文章