【问题标题】:Defined variable is undefined已定义变量未定义
【发布时间】:2012-08-19 01:41:14
【问题描述】:

我正在访问 mongo(通过 mongoose customer.find())并找回一些看起来像

[{ _id: 5029a09e099fb5095fdb2d73,
  clientId: 22,
  company: 'X',
  email: 'X@Y.ca',
  firstName: 'X',
  lastName: 'Y',
  quality: 'Sold',
  address: 
   { phone: '',
     alt: '',
     street1: '',
     street2: '',
     city: '',
     state: 'Ontario',
     country: 'Canada',
     code: '' },
  comments: []
}]

请注意,这是直接来自 console.log 的结果。这不是我要输入的内容,这是来自 mongoDB 的结果。 _id 是由 mongo 以这种形式返回的,与问题完全无关。

当我尝试时

console.log(customer[0])我明白了

{ _id: 5029a09e099fb5095fdb2d73,
      clientId: 22,
      company: 'X',
      email: 'X@Y.ca',
      firstName: 'X',
      lastName: 'Y',
      quality: 'Sold',
      address: 
       { phone: '',
         alt: '',
         street1: '',
         street2: '',
         city: '',
         state: 'Ontario',
         country: 'Canada',
         code: '' },
      comments: []
    }

如预期的那样

当我尝试console.log(customer[0].quality) 时,我得到undefined

当我尝试console.log(customer[0].email) 或任何其他方法时,它工作正常,我得到了预期值。

据我所知,质量不是一个保留字,我是否遗漏了什么?

【问题讨论】:

  • 呃,_id 不应该是一个字符串吗?你周围没有引号。
  • @Amaan 是对的,上面的结果是 SyntaxError: identifier started after numeric literal
  • 从console.log复制粘贴
  • @Amaan 是对的。
  • 你试过for(var prop in customer[0]) { console.log(prop); } 吗?你在输出列表中看到quality 了吗?

标签: javascript node.js mongodb


【解决方案1】:

Mongoose find 返回查询对象。它不仅仅是普通的 javascript 对象。它继承了模型的方法、查询方法、Document 的方法。 console.log 只显示该对象的 toString 方法结果。它可以被 getter 或 virtuals 修改。 _id 不带引号也是 ObjectId 类的 toString 结果。尝试通过 customer[0].get('quality'); 访问您的价值或者通过 customer[0].toObject() 将其转换为普通对象;

【讨论】:

    【解决方案2】:

    我把你的数据插入到 mongo 中,运行查询 console.log 电子邮件、质量等。

    一切都按预期进行,没有未定义的洞察力。

    我没有使用 Mongoose,mongojs,所以也许 mongoose 存在错误。

    【讨论】:

      【解决方案3】:

      这工作正常:

      var customer = [{ _id: "5029a09e099fb5095fdb2d73",  clientId: 22,  company: 'X',  email: 'X@Y.ca',  firstName: 'X',  lastName: 'Y',  quality: 'Sold',  address:    { phone: '',     alt: '',     street1: '',     street2: '',     city: '',     state: 'Ontario',     country: 'Canada',     code: '' },  comments: []}]
      console.log(customer[0].quality) // it will give Sold
      
      make _id:5029a09e099fb5095fdb2d73 to _id:"5029a09e099fb5095fdb2d73"
      

      【讨论】:

        猜你喜欢
        • 2018-08-06
        • 1970-01-01
        • 2020-11-30
        • 2020-08-17
        • 2014-10-09
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多