1

演算子mongodbを使用して地理空間クエリを作成しようとしています。$within次の場所を保持する場所フィールドを持つコレクションエントリがあります。

location: {
  bounds: {
    south_west: { lat: XX.XXXXXX, lng: XX.XXXXX },
    north_east: { lat: XX.XXXXXX, lng: XX.XXXXX }
  },
  center: {
    lat: XX.XXXXXX,
    lng: XX.XXXXXX
  }
}

私のクエリでは、オブジェクトlocation.centerの境界内にあるすべての場所を取得したいと思います。google.maps私はこのようなものを持っています:

query = {}

var southWest = map.getBounds().getSouthWest();
southWest = [southWest.lat(), southWest.lng()];

var northEast = map.getBounds().getNorthEast();
northEast = [northEast.lat(), northEast.lng()];

query["location.center"] = { $within: { $box: [southWest, northEast] } }

しかし、私は一貫して

Exception from Meteor.flush: Error: Unrecognized key in selector: $within
at Error (<anonymous>)
at Function.LocalCollection._exprForConstraint (http://localhost:3000/packages/minimongo/selector.js?2373a18a9a4640513e41d7850f17f62f76b7c589:559:11)
at Function.LocalCollection._exprForOperatorTest (http://localhost:3000/packages/minimongo/selector.js?2373a18a9a4640513e41d7850f17f62f76b7c589:468:36)
at Function.LocalCollection._exprForKeypathPredicate (http://localhost:3000/packages/minimongo/selector.js?2373a18a9a4640513e41d7850f17f62f76b7c589:387:34)
at Function.LocalCollection._exprForSelector (http://localhost:3000/packages/minimongo/selector.js?2373a18a9a4640513e41d7850f17f62f76b7c589:307:36)
at Function.LocalCollection._compileSelector (http://localhost:3000/packages/minimongo/selector.js?2373a18a9a4640513e41d7850f17f62f76b7c589:284:24)
at new LocalCollection.Cursor (http://localhost:3000/packages/minimongo/minimongo.js?7f5131f0f3d86c8269a6e6db0e2467e28eff6422:71:39)
at LocalCollection.find (http://localhost:3000/packages/minimongo/minimongo.js?7f5131f0f3d86c8269a6e6db0e2467e28eff6422:57:10)
at _.extend.find (http://localhost:3000/packages/mongo-livedata/collection.js?3ef9efcb8726ddf54f58384b2d8f226aaec8fd53:155:34)
at Template.feed.feed_items (http://localhost:3000/client/modules/js/feed.js?5ed30ddbd861944b636dbe03c13cc80421258a5b:129:17) 

そして、私はどのように進めるかわからない。単純なJSON.stringify(query)を使用すると、クエリが次のように出力されることに気付きました。

{"location.center":{"$within":{"$box":[[39.93623526127148,-75.63687337060549],[39.984129247435064,-75.57438862939455]]}}}

$withinとにかく、引用符がと$boxセレクターにラップされるのを防ぐことができますか?それが私の例外が投げ出されているところだと思います。

4

2 に答える 2

4

引用符は問題ではありません。それは単なる有効な JSON です。問題は、minimongo がまだ $within を実装していないことです。Matt Debergalisは Minimongo の不完全な状態についてコメントしました(2012 年 10 月 23 日):

meteor-talk の最近のトラフィックは、minimongo には改善と拡張の健全なウィッシュ リストがあることを思い出させてくれます。

[...]

  • $near、$within、および $maxDistance。

「実際の」mongodbアクセスがあるサーバーでこれを実行する方がうまくいくかもしれませんが、クライアントストアに同じ機能がない場合、それがどのように機能するかはわかりません.

Minimongo のソース コードが公開されています。おそらく、このセレクターを自分で実装して、プル リクエストを送信してみてはいかがでしょうか? :)

于 2013-01-10T16:47:42.697 に答える
0

これは古い質問かもしれませんが、誰かがこれを再訪した場合に備えて、これを使用して minimongo でクエリを実行できます。

locations.find(
    { "location.lng" : {
        "$gt" : bottomLeftLng,
        "$lt":  topRightLng  
      },
      "location.lat": {
        "$gt" : bottomLeftLat,
        "$lt": topRightLat
      }
   }
)
于 2013-03-24T18:19:36.373 に答える