Mongoose - 无法访问对象属性?

Posted

技术标签:

【中文标题】Mongoose - 无法访问对象属性?【英文标题】:Mongoose - can't access object properties? 【发布时间】: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)能够访问属性。反正我会加的。 【参考方案1】:

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

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

【讨论】:

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

以上是关于Mongoose - 无法访问对象属性?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Handlebars 中的数组访问对象属性

Mongoose - 无法访问 createdAt

无法通过 express/mongoose/angularjs 从 Mongodb 访问数据

无法向 Mongoose 查询返回的对象添加新属性 [重复]

无法向 Mongoose 查询返回的对象添加新属性 [重复]

Mongoose - 无法在路径 notification.from 上使用排序填充,因为它是文档数组的子属性