2013-09-01 3 views
0

Когда я выполнить следующий вид запроса с MongooseJS:

Place 
    .find({location:{$geoWithin:{$box:[[0, -40],[151.0983703,-33.8674744]]}}}) 
    .exec(function(err, places) { 
    ... 
    }); 

Я получаю нулевой результат и следующее сообщение возвращается в err

[Error: Can't use $geoWithin with Array.]

Но если я выполняю те же критерии, непосредственно против MongoDB, в командной строке:

> db.places.find({location:{$geoWithin:{$box:[[0, -40],[151.0983703,-33.8674744]]}}}) 

Я получаю правильный список записей, отображаемых на выходе.

Что я делаю неправильно с кодом MongooseJS?

+0

https://github.com/LearnBoost/mongoose/issues/1450 – vinayr

+0

Спасибо за ссылку. Я попробую обновить Mongoose и посмотреть, исправляет ли он это. – Jonathan

ответ

0

Похоже, $geoWithin не был реализован в версии Mongoose, которую я использую.

Моим решением на данный момент является использование библиотеки mongodb для родных, пока стабильная сборка Mongoose не будет обновлена ​​с поддержкой $geoWithin.

var mongodb = require('mongodb'); 
mongodb.MongoClient.connect(app.get('mongodb connection string'), function(err, db) { 
    if (err) throw err; 

    db.collection('places') 
     .find({location:{ 
      $geoWithin:{ 
       $box:[[Number(req.query.northEastLng), Number(req.query.northEastLat)], 
         [Number(req.query.southWestLng), Number(req.query.southWestLat)]]}}}) 
     .toArray(function(err, results) { 
      if (!results) 
       results = []; 

      res.render('nearbyplaces', { 
       results: results 
      }); 

      db.close(); 
     }); 
}); 

Это прекрасно работает.

(Примечание: если вы действительно хотите использовать Mongoose, вы можете загрузить последнюю неустойчивую сборку со своей страницы Github. Я бы предпочел не делать этого, потому что это осложнит развертывание моего приложения. скачайте все с npm install).

Смежные вопросы