Spring Data MongoDB - проекция и поиск - PullRequest
0 голосов
/ 14 ноября 2018

Я использую «Текстовый индекс с подстановочными знаками» для поиска шаблона во всех полях моего класса. Я также использую проекцию, чтобы удалить определенное поле:

@Query(value = "{$text: { $search: ?0 }, fields = "{'notWantedField':0}")

Однако я бы хотел предотвратить сопоставление чего-либо из нежелательного поля.

Другими словами, я хотел бы сначала спроецировать (и удалить поля), а затем выполнить поиск по оставшимся полям.

Есть ли способ объединить проекцию и поиск, сохраняя поиск по шаблону?

Большое спасибо.

Я использую spring-data-mongodb 1.10.8

1 Ответ

0 голосов
/ 19 ноября 2018

Возможным решением может быть оператор $ и в сочетании с $ regex .

Например, следуя документации Mongodb https://docs.mongodb.com/manual/reference/operator/query/text,, если предполагается создать текст индекс, объединяющий субъект и автор (db.articles.createIndex({"author": "text", "subject": "text"}), вы можете исключить поле author с помощью этого запроса:

db.articles.find( {$and: [{ $text: { $search: "coffee" } }, {"author": {'$regex' : '^((?!coffe).)*$', '$options' : 'i'}}]}, {"author": 0})

В вашем случае, учитывая, что ваш индекс является подстановочным знаком, вы должны исключить его, используя regex , все поля, которые также находятся в проекции.

...