Запрос монго с оператором или - PullRequest
0 голосов
/ 12 декабря 2018

Если параметр равен нулю - получить все объекты, если параметр не равен нулю - получить объекты с параметром.У меня есть запрос:

@Query("{$and : [{$or : [ { $where: '?0 == null' } , { topic : ?0 }]}] }")
    List<Event> find(Topic topic);

Когда я запускаю метод с topic = Topic.SPORT, я получаю:

выбросило исключение [Ошибка обработки запроса;вложенное исключение: org.springframework.data.mongodb.UncategorizedMongoDbException: не удалось выполнить запрос с кодом ошибки 16722 и сообщением об ошибке «ReferenceError: SPORT не определено» на локальном сервере: 27017;Вложенное исключение - com.mongodb.MongoQueryException: запрос не выполнен с кодом ошибки 16722 и сообщением об ошибке «ReferenceError: SPORT не определено» на локальном хосте сервера: 27017] с коренной причиной

Но если запустить этот методс topic = null, я получаю все объекты (это правда)

Я рефакторинг этого метода, как показано ниже:

@Query("{$and : [{$or : [ { $where: '\"?0\" == null' } , { topic : ?0 }]}] }")
    List<Event> find(Topic topic);

Я могу получить объекты с моим параметром topic = Topic.SPORT,но я не могу получить все объекты, где topic = null, я получил пустой список.Как мне решить эту проблему?

1 Ответ

0 голосов
/ 02 мая 2019

Чтобы решить вашу проблему, вы должны сначала что-то проверить.1. запрос по теме:? 0 2. if null ~> true $ где: '\ "? 0 \" == null' это ваш метод, но у нас есть другой способ найти его в mongodocument (https://docs.mongodb.com/manual/tutorial/query-for-null-fields/):

db.inventory.find( { item : { $type: 10 } } )
db.inventory.find( { item : { $exists: false } } )

При использовании $ type: 10 вы сохранили это поле как ноль и $ exit, чтобы проверить, доступно или нет это поле.

После этого у нас есть комбинация $ или. Надеюсь, вы сделаете этоэто хорошо

...