1

以下のような構造のドキュメントのコレクションがあります

{ _id: ObjectId("54723e44ec73a702fc979fc9"), 
    Start: { type: "Point", coordinates: [ -0.15261409999993703, 51.4428311 ] }, 
    End: { type: "Point", coordinates: [ -0.1258020000000215, 51.44695 ] } 
}

次のクエリを実行して、開始がポイントから 2000 単位で、終了がポイントから 1 単位であるドキュメントを検索しようとしています。

"Start" : 
     { "$near" : 
          { "$geometry" : 
             { "type" : "Point", 
                   "coordinates" : [-0.12580200000002151, 51.44695]
              }
          },
      "$maxDistance" : 2000.0 
 }, 
 "End" : 
    { "$near" : 
         { "$geometry" : 
             { "type" : "Point", 
                    "coordinates" : [-0.12580200000002151, 51.44695]
             }
         },
      "$maxDistance" : 1.0 
    } 

クエリを実行すると、常に or を実行しているかのようにドキュメントが返されます。つまり、start はポイントから x 単位、end はポイントから x 単位です。したがって、次の 2 つのドキュメントに対して実行すると、最初のドキュメントのみが返されると予想される場所で両方が返されます。

{ _id: ObjectId("54723e44ec73a702fc979fc9"), 
  Start: { type: "Point", coordinates: [ -0.15261409999993703, 51.4428311 ] }, 
  End: { type: "Point", coordinates: [ -0.1258020000000215, 51.44695 ] }
}
{ _id: ObjectId("54724f0cec73a70c383a27d4"), 
  Start: { type: "Point", coordinates: [ -0.15261409999993703, 51.4428311 ] }, 
  End: { type: "Point", coordinates: [ -0.09553900000003068, 51.427025 ] } 
}

私はこれを次のようにできるはずだと確信しています

http://blog.mongodb.org/post/50984169045/new-geo-features-in-mongodb-2-4

「さらに、同じ複合インデックスで複数の 2dsphere インデックスを持つことができます。これにより、次のようなクエリが可能になります。「JFK から 50 マイル以内の開始位置と YYC の 100 マイル以内の終了位置を持つルートを検索する」。

明確にするために。上記のクエリは、START ロケーション $near point AND END ロケーション $near point に対して AND クエリを実行することになっています。しかし、それが実際に行っているように見えるのは、場所 $near point を開始するか、場所 $near point を終了することです。

1 つのドキュメントで 2 つの $near クエリに対して AND クエリを実行するにはどうすればよいですか?

4

0 に答える 0