【问题标题】:Mongoose won't update new field after updating schema declaration更新架构声明后,Mongoose 不会更新新字段
【发布时间】: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)。然后您将查看发送的方法调用是否与您正在调用的不同。但请先检查其他事项。

标签: node.js mongodb mongoose


【解决方案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
    • 在删除集合并再次创建它之后它可以工作,这让我感到困惑和担心,因为我无法在生产中删除集合。
    猜你喜欢
    • 2021-06-21
    • 2012-02-10
    • 2015-10-01
    • 2019-06-28
    • 2019-09-27
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多