0

次のドキュメントが与えられます。

{
  _id: 'foo'
  locations: [
    {
      lat: 1,
      lon: 2,
      type: 'home'
    },
    {
      lat: 10,
      lon: 20,
      type: 'office'
    }
  ]
}

{
  _id: 'bar'
  locations: [
    {
      lat: 10,
      lon: 20,
      type: 'home'
    },
    {
      lat: 1,
      lon: 2,
      type: 'office'
    }
  ]
}

特定のタイプの場所の近くにあるすべてのドキュメントを見つけることは可能ですか?

たとえば、クエリは次のとおりです。 db.objects.find({locations: {$near: {lat: 1, lon: 2}, $maxDistance: 1}, 'locations.type': 'home'})

foo と bar の両方が返されます。これは、どちらも「home」タイプの場所と [1,2] の近くの場所があるためです。

クエリで実行したいのは、ホームの場所が [1,2] の近くにあるため、foo だけを見つけることです。

4

1 に答える 1

0

スキーマを変更することを検討できます。場所の配列を持つ単一のドキュメントの代わりに、それぞれがタイプの指定を持つ単一の場所を表す複数のドキュメントを検討してください。

ここで実行する必要があるクエリのタイプでは、同じ配列要素で両方の条件を確実に満たすために $elemMatch が必要です。このために elemMatch を使用します。残念ながら、geoSpatial クエリでは機能しません。少なくとも、現在それを構築する方法はありません。それを機能させるための未解決のJira チケットがあります。

于 2012-10-25T01:11:39.373 に答える