国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于Mongoose的geoNear方法的使用

Airy / 3284人閱讀

摘要:背景最近在學(xué)習(xí),看的是的這本書。其中中涉及到了的方法的使用。不過(guò)自己在按照作者的方法進(jìn)行測(cè)試的時(shí)候,發(fā)現(xiàn)并不能輸出想要的結(jié)果。通過(guò)相關(guān)研究找到了解決的方法,因此分享。

背景

最近在學(xué)習(xí)MEAN,看的是Simon HelmesGetting MEAN with Mongo, Express, ANgular, and Node這本書。其中Chapter 8 Adding Angular components to an Express application中涉及到了MongoosegeoNear方法的使用。不過(guò)自己在按照作者的方法進(jìn)行測(cè)試的時(shí)候,發(fā)現(xiàn)并不能輸出想要的結(jié)果。通過(guò)相關(guān)研究找到了解決的方法,因此分享。

問(wèn)題

作者在書中演示了通過(guò)瀏覽器的navigator.geolocation發(fā)送經(jīng)緯度坐標(biāo)到API接口,接著后臺(tái)使用MongoosegeoNear方法,從數(shù)據(jù)庫(kù)中將離目標(biāo)坐標(biāo)較近的數(shù)據(jù)推送出來(lái)。后臺(tái)從Mongo中取數(shù)的大致代碼如下:

/* GET list of locations */
module.exports.locationsListByDistance = function(req, res) {
  var lng = parseFloat(req.query.lng);
  var lat = parseFloat(req.query.lat);
  var maxDistance = parseFloat(req.query.maxDistance);
  var point = {
    type: "Point",
    coordinates: [lng, lat]
  };
  var geoOptions = {
    spherical: true,
    maxDistance: theEarth.getRadsFromDistance(maxDistance),
    num: 10
  };
  if ((!lng && lng!==0) || (!lat && lat!==0) || ! maxDistance) {
    // ...
  }
  Loc.geoNear(point, geoOptions, function(err, results, stats) {
    // ...
  });
};

其中,作者的意思是maxDistance數(shù)據(jù)是按照公里進(jìn)行輸入,然后轉(zhuǎn)換為弧度,并把弧度作為參數(shù)傳入geoNear中。但是得到的結(jié)果,確實(shí)沒(méi)有任何數(shù)據(jù)輸出。

解決

經(jīng)過(guò)查找后發(fā)現(xiàn),Mongo中對(duì)此是如下的定義:

2dsphere Index

If using a 2dsphere index, you can specify either a GeoJSON point or a legacy coordinate pair for the near value.
You must include spherical: true in the syntax.
With spherical: true, if you specify a GeoJSON point, MongoDB uses meters as the unit of measurement:

db.runCommand( {
   geoNear:  ,
   near: { type: "Point" , coordinates: [  ] } ,
   spherical: true,
   ...
} )

With spherical: true, if you specify a legacy coordinate pair, MongoDB
uses radians as the unit of measurement:

db.runCommand( {
   geoNear:  ,
   near: [  ],
   spherical: true,
   ...
} )

書中的源代碼確實(shí)是GeoJSON的格式,那為何作者使用了弧度,而沒(méi)有使用米呢?原來(lái)Mongoose3.9.5版本才支持了Mongo的這個(gè)設(shè)置。原文如下:

3.9.5 / 2014-11-10
fixed; geoNear() no longer enforces legacy coordinate pairs - supports GeoJSON #1987 alabid

用可能是作者在寫書的時(shí)候,還用的OK,后來(lái)版本更新后,設(shè)置就失效了。

解決

因此,按照作者原來(lái)的思路,代碼應(yīng)該改為:

/* GET list of locations */
module.exports.locationsListByDistance = function(req, res) {
    // ...
    var geoOptions = {
        spherical: true,
        maxDistance: maxDistance * 1000,    // <--
        num: 10
    };
    // ...
};

var buildLocationList = function(req, res, results, stats) {
    var locations = [];
    results.forEach(function(doc) {
        locations.push({
            distance: doc.dis / 1000,    // <--
            // ...
        });
    });
    return locations;
};

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/18859.html

相關(guān)文章

  • mongodb 提示 no geo indices for geoNear

    { [MongoError: exception: geoNear command failed: { ok: 0.0, errmsg: no geo indices for geoNear }] name: MongoError, message: exception: geoNear command failed: { ok: 0.0, errmsg: no geo indices f...

    lsxiao 評(píng)論0 收藏0
  • mongoDB 學(xué)習(xí)筆記純干貨(mongoose、增刪改查、聚合、索引、連接、備份與恢復(fù)、監(jiān)控等等)

    摘要:集合名命名規(guī)范集合名不能是空字符串。集合名不能含有字符空字符,這個(gè)字符表示集合名的結(jié)尾。集合名不能以開(kāi)頭,這是為系統(tǒng)集合保留的前綴。有些驅(qū)動(dòng)程序的確支持在集合名里面包含,這是因?yàn)槟承┫到y(tǒng)生成的集合中包含該字符。 原始文章鏈接 - 我的博客:http://www.lovebxm.com/2017/0... MongoDB - 簡(jiǎn)介 官網(wǎng):https://www.mongodb.com/ ...

    Java3y 評(píng)論0 收藏0
  • mongogeo查詢

    摘要:不過(guò)這樣的順序?qū)τ谑褂没《炔樵?,很容易出錯(cuò),即查詢要求順序是經(jīng)度緯度,即數(shù)據(jù)和參數(shù)都是這樣的順序。對(duì)于要指定之類的入?yún)r(shí),使用非要注意單位換算對(duì)于使用查詢的時(shí)候,以及自動(dòng)設(shè)置,無(wú)需關(guān)心入?yún)挝晦D(zhuǎn)換。 maven org.springframework.boot spring-boot-starter-data-mongo...

    Anchorer 評(píng)論0 收藏0
  • (轉(zhuǎn))Mongoose學(xué)習(xí)參考文檔

    摘要:轉(zhuǎn)自一快速通道名詞解釋一種以文件形式存儲(chǔ)的數(shù)據(jù)庫(kù)模型骨架,不具備數(shù)據(jù)庫(kù)的操作能力由發(fā)布生成的模型,具有抽象屬性和行為的數(shù)據(jù)庫(kù)操作對(duì)由創(chuàng)建的實(shí)體,他的操作也會(huì)影響數(shù)據(jù)庫(kù)注意本學(xué)習(xí)文檔采用嚴(yán)格命名方式來(lái)區(qū)別不同對(duì)象,例如的文本屬性的數(shù)據(jù)庫(kù)模型實(shí) 轉(zhuǎn)自 https://cnodejs.org/topic/504... 一、快速通道 1.1 名詞解釋 Schema : 一種以文件形式存儲(chǔ)的...

    Sleepy 評(píng)論0 收藏0
  • Nodejs+Express學(xué)習(xí)二(Mongoose基礎(chǔ)了解)

    摘要:學(xué)習(xí)注定少不了與數(shù)據(jù)庫(kù)打交道,而和可以說(shuō)是絕配,這篇主要是簡(jiǎn)單介紹這個(gè)模塊。通過(guò)創(chuàng)建查詢是數(shù)據(jù)庫(kù)中運(yùn)用最多也是最麻煩的地方,這里對(duì)解讀的并不完善,僅僅是自己的一點(diǎn)領(lǐng)悟而已。 學(xué)習(xí)Node注定少不了與數(shù)據(jù)庫(kù)打交道,而MongoDB和Node可以說(shuō)是絕配,這篇主要是簡(jiǎn)單介紹Mongoose這個(gè)模塊。由于本人也是邊學(xué)邊寫的這篇文章,絕對(duì)會(huì)有新手的味道,請(qǐng)大神看到這里就表往下看了。 名詞介紹稍...

    617035918 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<