2016-10-28 7 views
0

Я перехожу мой код от старого драйвера PHP MongoDB: http://php.net/manual/en/class.mongoclient.phpполнотекстового поиска счет проекции в новый драйвер MongoDB для PHP

Чтобы новый драйвер MongoDB: http://php.net/manual/en/set.mongodb.php

В предыдущей версии у меня было это:

$db->collection->find([ 
    '$text' => [ '$search' => "stackoverflow" ] 
], 
[ 
    'score' => [ '$meta' => 'textScore' ] 
])->sort([ 'sort' => [ 'score' => [ '$meta' => 'textScore' ] ] ]); 

В новой версии больше нет функции сортировки на курсоре, вы должны передать ее как опцию. Так новый код выглядит так:

$db->collection->find([ 
    '$text' => [ '$search' => 'stackoverflow' ] 
], 
[ 
    'score' => [ '$meta' => 'textScore' ], 
    'sort' => [ 'score' => [ '$meta' => 'textScore' ] ] 
]); 

Но я получаю сообщение об ошибке: «BADVALUE должен иметь $ мета проекцию для всех $ мета ключей сортировки»

Это потому, что оценка проекции не происходит больше , Если вы просто удалите опцию сортировки и результат журнала, вы увидите, что в массиве результатов нет оценки. Об этом вообще нет документации.

Кто-нибудь знает, как исправить эту проблему?

Спасибо

ответ

3

Если вы хотите найти текстовый индекс Монго и сортировку по полю textScore с новым драйвером PHP, вы должны использовать класс Query, добавить фильтр и варианты там, а затем выполнить с помощью Класс менеджера. В вашем случае это будет что-то вроде этого:

$filter = [ 
    '$text' => ['$search' => 'stackoverflow']]; 

$options = [ 
    'projection' => [ 
     'score' => ['$meta' => 'textScore'] 
      ], 
    'sort' => [ 
     'score' => ['$meta' => 'textScore'] 
     ] 
]; 

$mng = new MongoDB\Driver\Manager("mongodb://yourdbserver:27017"); 
$mongoQuery = new MongoDB\Driver\Query($filter, $options); 
$cursor = $mng->executeQuery('db_name.collection_name', $mongoQuery); 

Смотрите страницу документации для Query class, первая нота, кажется, очень полезно.

 Смежные вопросы

  • Нет связанных вопросов^_^