无法访问对象属性。返回undefined(Meteor)

时间:2015-06-06 22:08:56

标签: javascript node.js mongodb object meteor

我试图从一个物体获得纬度和经度。为什么它会返回 Undefined ?我正在使用.find(),因为:https://blog.serverdensity.com/checking-if-a-document-exists-mongodb-slow-findone-vs-find/

var LatLngs = Shops.find({_id:template.data._id}, {fields: {latitude: 1, longitude: 1}, limit:1}).fetch();

console.log(LatLngs);
     

控制台:

[Object]
0: Object_id: "vNHYrJxDXZm9b2osK"
latitude: "xx.x50785"
longitude: "x.xx4702"
__proto__: 
Objectlength: 1
__proto__: Array[0]

尝试2:

var LatLngs = Shops.find({_id:template.data._id}, {fields: {latitude: 1, longitude: 1}, limit:1}).fetch();

console.log(LatLngs.longitude);
     

控制台:

undefined

2 个答案:

答案 0 :(得分:1)

Mongo游标的fetch方法返回一个数组,因此您必须访问数组中第一个项目的经度:LatLngs[0].longitude

此外,您正在使用客户端,因此使用MiniMongo,即Mongo查询语言的浏览器重新实现:您无法对findOne与{{find执行的方式做出相同的假设1}}因为它与常规服务器端MongoDB引擎的实现不同。

只需使用findOne,它就是专为您的用例而设计的。

答案 1 :(得分:1)

fetch返回一个数组。在您的第一个示例中,您需要执行以下操作:

// fetch an array of shops
var shops = Shops.find(...).fetch();
// get the first shop
var shop = shops[0];
// if the shop actually exsists
if (shop) {
  // do something with one of its properies
  console.log(shop.latitude);
}

链接的文章在这种情况下不适用 - 您没有测试它是否存在,您实际上正在获取它并阅读其内容。

改为使用findOne

// get a matching shop
var shop = Shops.findOne(...);
// if the shop actually exsists
if (shop) {
  // do something with one of its properies
  console.log(shop.latitude);
}