承诺得到解决但返回部分数据 - 休息' undefined'

时间:2017-05-11 09:14:12

标签: json node.js mongodb asynchronous mongoose

我遇到了从MongoDB的mLab返回的Promise问题。部分数据正确传递,其余未定义。我不确定这里发生了什么。

这是我连接到mLab的集合中的JSON对象。

{
    "_id": {
        "$oid": "591424da932aad14186a7213"
    },
    "name": "Archos Elements 50 Oxygen",
    "weight_oz": 4.59,
    "battery_capacity_mAh": 2300,
    "platform": "Android",
    "date": {
        "$date": "2017-05-11T08:46:18.684Z"
    },
    "dimensions": {
        "width_mm": 70.5,
        "height_mm": 143,
        "depth_mm": 9.9
    },
    "__v": 0
}

这就是我检索数据的方式(正文解析器用于捕获用户通过HTML表单输入的电话的名称)

router.post('/page_2', function(req, res){
phone = req.body.phone
mobile_and_tablet_model.find({name:phone}).exec(function(err, result) {
        if (err) 
            throw err;
    }).then(function(MongoDBdata){
        console.log(MongoDBdata[0]) // logs out entire JSON object correctly
        console.log(MongoDBdata[0]._id) // 5002
        console.log(MongoDBdata[0].name) // Archos Elements 50 Oxygen
        console.log(MongoDBdata[0].weight_oz) // undefined
        console.log(MongoDBdata[0].battery_capacity_mAh) // undefined
        console.log(MongoDBdata[0].platform) // Android
        console.log(MongoDBdata[0].date) // 2017-05-11T08:06:27.894Z
        console.log(MongoDBdata[0].dimensions) // undefined
        res.render('page_2.hbs', {
            title: 'some title', 
            phone: phone,
            battery_capacity: MongoDBdata[0].battery_capacity_mAh, // undefined
            platform: MongoDBdata[0].platform // Android
        })
    })
})

有人可以帮我理解这种行为吗?帮我解决一下吗?

我不明白为什么我会得到' undefined'对于JSON对象上的一些嵌套值。我远不是Promises的专家,但如果我理解正确,那么promise已经解决,那么同步/异步行为不应该在这里发挥作用吗? (特别是因为console.log(MongoDBdata [0])完全注销了JSON内容。

非常感谢!

1 个答案:

答案 0 :(得分:0)

终于明白了。

我没有调整架构的问题(一个架构用于将数据上传到MongoDB,另一个架构用于检索 - 我已经更改了一个用于上传,而不是另一个用于下载)

这就是为什么有些数据可以返回'undefined'的原因(即使从集合中检索到的JSON已经注销100%正确)。当我尝试访问对象上的嵌套值时,我实际上使用了不正确的mongoose模型。

下面的模式工作(所有返回'undefined'的值现在返回正确的值)。希望有人可以从我的错误中受益。