Mongoose 模型对象行为异常

Posted

技术标签:

【中文标题】Mongoose 模型对象行为异常【英文标题】:Mongoose Model Object behaves strangely 【发布时间】:2017-12-30 15:52:46 【问题描述】:

我正在使用猫鼬从数据库中获取人员数据。这是我使用的代码:

return new Promise((resolve, reject) => 
    Person.findOne(, (err, result) => 
      if(err) 
        reject(err);
       else 
        console.log(result);
        console.log(result.firstname);
        console.log(result.githubLink);
        resolve(result);
      
    );
  );

这是来自 console.log(result) 的输出

 _id: 593c35e6ed9581db3ef85d75,
firstname: 'MyName',
lastname: 'MyLastName',
jobtitle: 'Web Developer',
email: 'foo@example.com',
githubLink: 'https://github.com/myGithub' 

这是来自 console.log(result.firstname);和 console.log(result.githubLink);

MyName
undefined

这个承诺会以某种方式破坏这个结果吗?这真的很奇怪,因为只记录结果会显示我的 github 链接,而记录的链接显示未定义。

【问题讨论】:

你确定没有错别字吗? 我已经从 console.log(result) 的输出中复制并粘贴了“githubLink”,我已经盯着这段代码 30 分钟了。我不认为这是一个错字 复制您正在执行日志记录的代码的实际行,并在您的问题中显示架构。 谢谢尼尔。我正在将我的架构复制到这里,并注意到我在那里没有 githubLink 属性。我怎样才能将其标记为正确答案? 【参考方案1】:

如果您的数据库对象中存在的字段实际上并不存在于为模型定义的架构中,那么它们仍将“记录”但您无法正常访问属性的值。

在大多数情况下,您确实希望在架构中正确定义项目:

githubLink: String

或者您可以使用.get() 方法访问您故意不想定义的属性:

result.get('githubLink')

【讨论】:

以上是关于Mongoose 模型对象行为异常的主要内容,如果未能解决你的问题,请参考以下文章

以角度(mongoose/mongodb)更新模型,特别是作为模型属性的对象数组

无法使用 $pull (Mongoose) 为用户模型删除数组中的对象

获取 Mongoose 模型的(关联)数组

将 Mongo/Mongoose 对象保存在另一个模型中

Mongoose使用小结

在 Mongoose 中为对象数组创建索引