0

mongodb の geoNear コマンドを追加のクエリで使用して結果をフィルタリングすると、いくつかの問題に遭遇しました。次のクエリは rockmongo で作成されます。

私のコレクション「poi」では、ドキュメントにはオブジェクト ID を含む配列である「プロファイル」があります。それらを検索する場合:

{
  geoNear : "poi",
  near : [19,47],
  query : {profiles : ObjectId("511f360901c610e813000004")}
}

結果が出ません。

Response from server: {    "ns": "local.poi",    "near": "1100010010100011101101101111001010100011101101101111",    "results": [
        ],    "stats": {
     "time": NumberInt(2),
     "btreelocs": NumberInt(0),
     "nscanned": NumberInt(510),
     "objectsLoaded": NumberInt(510),
     "avgDistance": 0,
     "maxDistance": 0    },    "ok": 1  }

ただし、クエリがなくても、単純な {profiles : ObjectId("511f360901c610e813000004")} クエリを使用しても、期待どおりの結果が得られます。

別の問題は、ドキュメントの約半分が「名前」が「x」で、残りの半分が「y」である場合です。

{
  geoNear : "poi",
  near : [47,19.5],
  query : {"$and" : [{name : { "$in" : [/.*y.*/i]}}]}
}

単純な {"$and" : [{name : { "$in" : [/. y. /i]}}]} はそれらを提供します。実際、このサンプル クエリは非常に単純ですが、結果に違いはありません。これは、プロジェクトでの実際のクエリに似ています。

これらを PHP で試すと、追加のクエリが渡されても結果が得られるため、すべてのドキュメントが距離順に並べ替えられます。

私が間違っているかどうかを調べるのを手伝ってください。

4

1 に答える 1

0

さて、問題は PHP ドライバーにありました。mongo シェルで動作することを発見したので、1.3.1 に戻したところ、動作するようになりました!

于 2013-02-19T16:18:04.793 に答える