javascript - 更新时, Mongoose 给我一个错误 : TypeError: Cannot set property 'vidName' of null

标签 javascript node.js mongodb

我正在尝试更新文档中的一个特定字段。这是我的代码:

module.exports.editAndUpdate = function(playerVideo, callback) {
    console.log(playerVideo.vidName);
    var newVidId = toString(playerVideo.vidId);
    myModel.findById(newVidId, function(err, doc) {
      if(err) throw err;
      doc.vidName = playerVideo.vidName;
      doc.save(callback);
    });
 }

这里的playerVideo是一个文档,vidNamevidId是它的字段。

而不是 doc.vidName = playerVideo.vidName,如果我使用 doc.vidName = "Hey",那么它工作得很好。我使用了 typeof 方法并检查了 playerVideo.vidName 是否是一个 String,是的,它是。

请帮我解决这个问题。感谢您的任何建议:)

最佳答案

对我来说,问题发生在我更新嵌套对象时,该对象的键值中有一个句号。

例如

"$set": {
    "some.field": {
        "validuser": "this works",
        "invalid.user": "this breaks mongo"
    }
}

MongoDB doesn't support keys with a dot ,并提供了这个神秘的错误:

cannot set property 'value' of null

解决方案 - 不要存储带有句号的 key !

关于javascript - 更新时, Mongoose 给我一个错误 : TypeError: Cannot set property 'vidName' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846712/

相关文章:

mongodb - 在 GameSparks 中查询玩家数据返回 0 个结果

javascript - Angular 2在初始化第二张 map 时无法读取未定义的属性 'maps'

javascript - 如何在这个 getter/setter 场景中实现 ng-model 绑定(bind)?

javascript - WebCenter 站点样式表

javascript - MongoDb 中的自动增量字段与异步批量插入

mongodb - “Robo 3T” 无法打开,因为无法验证开发者

javascript - jquery .serialize() 不包含序列化字符串中的选择列表选定值

mysql - NodeJS MySQL 撇号重复与 INSERT 查询

javascript - git提交错误的文件名首字母大写

mongodb - 在 Golang 的 mongodb 中插入结构