0

MongooseJSで次の種類のクエリを実行すると:

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

結果がゼロで、次のメッセージがerr

[エラー: 配列で $geoWithin を使用できません。]

それでも、MongoDB に対してまったく同じ条件をコマンド ラインで直接実行すると、次のようになります。

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

出力に表示されるレコードの正しいリストを取得します。

MongooseJS コードのどこが間違っていますか?

4

1 に答える 1

0

$geoWithin私が使用しているバージョンの Mongoose には実装されていないようです。

当面の私の解決策は、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 を使用したい場合は、Mongoose の Github ページから最新の不安定なビルドをダウンロードできます。アプリの展開が複雑になるため、ダウンロードしたくありません。npm install)。

于 2013-09-01T05:48:02.853 に答える