我遇到了从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内容。
非常感谢!
答案 0 :(得分:0)
终于明白了。
我没有调整架构的问题(一个架构用于将数据上传到MongoDB,另一个架构用于检索 - 我已经更改了一个用于上传,而不是另一个用于下载)
这就是为什么有些数据可以返回'undefined'的原因(即使从集合中检索到的JSON已经注销100%正确)。当我尝试访问对象上的嵌套值时,我实际上使用了不正确的mongoose模型。
下面的模式工作(所有返回'undefined'的值现在返回正确的值)。希望有人可以从我的错误中受益。