我试图从一个物体获得纬度和经度。为什么它会返回 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
答案 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);
}