2015-06-12 2 views
1

Я знаю, что MongoDB не поддерживает поиск по text index и geospatial index в то же время, как написано here. Но я видел предложения использовать $geoWithin вместо $near. Я использую $geoWithin с $box geometry и не дал никаких результатов. Однако, когда я использую $geoWithin и $center геометрию, он действительно работает. Что может быть неправильным? Не поддерживается ли это? Это ошибка? Конечно, если я применяю эти условия запроса отдельно (текст и геопространственный), все это работает.MongoDB text search and geoWithin search

ответ

1

Хотя в документации несколько раз упоминается, что $geoWithin не требует геопространственного индекса. Я не мог заставить его работать с оператором $box.

Это не работает:

db.getCollection('Article').find({ 
    "coordinates": { 
     $geoWithin: { 
      $box: [ 
       [13.2680001, 49.805786], 
       [13.4758465, 49.6776084] 
      ] 
     } 
    },  
    $text: { 
     $search: "Lorem ipsum" 
    } 
}) 

Довольно простое решение заключается в использовании $gte и $lte операторов вместо этого.

Рабочий раствор:

db.getCollection('Article').find({ 
    "coordinates.longitude": { $gte: 13.2680001, $lte: 13.4758465 }, 
    "coordinates.latitude": { $gte: 49.6776084, $lte: 49.805786 }, 
    $text: { 
     $search: "Lorem ipsum" 
    } 
}) 

Я, однако, я не уверен, о выполнении такого запроса.