【问题标题】:Mongoose - can't access object properties?Mongoose - 无法访问对象属性?
【发布时间】:2016-07-22 17:38:14
【问题描述】:

我正在尝试访问返回的 MongoDB (mongoose) 查找的属性。

如果我尝试通过控制台记录整个对象,我可以看到所有内容。但是如果我尝试记录一个属性,我会得到undefined。对象在那里!

function getAll () {
    let d = q.defer();

    User.find({}, function (err, docs) {
        if (err) {
            d.reject(err);
        }

        for(let user of docs) {
            console.log(user); // This works!
            console.log(user.email); // This returns undefined!
        }

        d.resolve();
    });

    return d.promise;
}

有什么想法吗? 我还尝试使用 JSON.parse 以防它被字符串化(只是为了确保)但它不是。

更新

看来我可以使用user._doc.email 访问结果。 但这是什么原因造成的?我不记得以前必须这样做。

【问题讨论】:

  • 您的控制台中究竟显示了什么?
  • @RyanO'Hara '未定义'。记录整个用户对象会按照应打印的方式打印对象,包括所有属性和值。
  • 您能否提供包含 1 个数据样本的最小插入脚本?
  • 'for(文档中的用户)';不是“的”
  • @activatedgeek 我可以,但我确信这无关紧要。因为接收响应的客户端(angularjs)能够访问属性。反正我会加的。

标签: javascript node.js mongodb mongoose ecmascript-6


【解决方案1】:

如果您在console.log 整个文档时显示了文档中的某个字段,但在您直接访问该字段时未显示,则表示模型的架构定义中缺少该字段。

所以将email 添加到User 的架构中。

【讨论】:

  • 作为一个相对较新的人,我发现这个答案非常难以理解。那么,更明确地说,如何将字段添加到模型的模式中?具体来说,我正在使用 asn1.js 解析证书,并在树中遍历,当我尝试访问 valueBlock 元素的 blockName 字段时遇到了这个问题。它会在我使用 JSON.stringify 输出整个树时显示,但在我访问 valueBlock 节点的 blockName 属性时不会显示
  • @CodeJockey 这是特定于 MongooseJS 库 (mongoosejs.com/docs/guide.html#definition) 中模式的问答。你在用猫鼬吗?
猜你喜欢
  • 2015-12-14
  • 2012-07-26
  • 2011-07-05
  • 2015-08-02
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
相关资源
最近更新 更多