【问题标题】:Mongoose returns undefined for an existing fieldMongoose 为现有字段返回 undefined
【发布时间】:2014-04-04 01:11:24
【问题描述】:

在 mongoose 请求之后,我得到了我的文档 doc,这是查询的结果

这是使用的架构

var searchSchema = new mongoose.Schema({
    original : String,
    images : [String],
    image: String
});

型号:

var searchModel = mongoose.model('Search', searchSchema);

使用的代码:

searchModel.findOne({original : input}, function (err, doc) {
    if (err) {
        console.log(err);
    }
    if (typeof doc !== "undefined") {
        console.log(doc);
                    console.log(doc.image);
    }
});

第一个console.log

{ 
    _id: 531401bf714420359fd929c9,
    image: 'http://url.com/image.jpg',
    original: 'lorem ipsum dolor sit amet' 
}

第二个返回undefined,但前一个确实显示了一个现有的image 属性,这意味着它存在。

我的架构没有什么特别之处,所以我不明白这里可能发生了什么..

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    当您尚未将字段添加到架构中时,您会看到这一点。

    image 添加到您的架构中,它应该可以工作:

    image: String
    

    【讨论】:

    • 已经是了。我尝试删除所有文档,更改字段名称并检查以确保它在架构中,然后重新添加所有内容,并且当属性存在时(我什至可以在查询中选择它),当我尝试时它是未定义的奇怪地访问它
    • @Malharhak 您能否更新您的问题以包含定义架构和模型并执行创建doc 的查询的代码?
    • 好吧,没关系,我有一个版本控制错误,所以我的架构没有正确的属性。
    • 我可以吻你(但我不会:))!
    【解决方案2】:

    这是因为对象的 toString() 方法返回 _doc 属性。您可以使用: console.log(doc._doc.image);

    【讨论】:

      【解决方案3】:

      我遇到了同样的错误,但是像 doc[0].image 这样访问属性可以正常工作。

      【讨论】:

        【解决方案4】:

        尝试像这样使用括号表示法:

        doc['image']
        

        如果它有效,我无法解释为什么,但也许有人可以对此有所了解?

        【讨论】:

        • 是的,我确实尝试过,但没有任何改变
        • 你能提供你正在做的查询吗?
        • 我在问题中添加了有关架构/模型/查询的信息
        • doc.image 和 doc['image'] 是一回事。请参阅我的回答,解释为什么会发生这种情况。
        猜你喜欢
        • 2016-06-28
        • 2013-11-23
        • 2015-06-26
        • 2021-02-05
        • 2018-07-19
        • 2018-06-17
        • 1970-01-01
        • 2017-08-18
        • 2016-06-03
        相关资源
        最近更新 更多