JSONPath запрос на MongoDB? - PullRequest
0 голосов
/ 06 июля 2018

У нас есть User данные, сохраненные в MongoDB. Клиент дает запрос JSONPath для запроса отфильтрованного набора пользователей.

Например:

$.users[@.salary > 10000]

- это запрос JSONPath , заданный для извлечения пользователей с зарплатой, превышающей 10000.

Данные:

   "users": [ {
      "firstName": "John",
      "lastName" : "doe",
      "age"      : 26,
      "salary"   : 5000, 
      "address"  : {
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
      },
      "phoneNumbers": [
        {
          "type"  : "iPhone",
          "number": "0123-4567-8888"
        },
        {
          "type"  : "home",
          "number": "0123-4567-8910"
        },
        ........
      ]
    }

Принимая во внимание, MongoQuery для того же будет:

db.inventory.find( { salary: { $gt: 10000 } })

У нас есть код приложения на Java, который подключается к MongoDB.

Можно ли как-нибудь запустить этот запрос JSONPath непосредственно к MongoDB ??

Использование запроса Mongo означало бы перевод запроса JSONPath в MongoQuery, что было бы громоздким переводом в коде. Очень грубым методом было бы сначала получить всех пользователей в AS (приложение), а затем преобразовать List<Document> в строку Json и затем выполнить запрос JSONPath.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 10 июля 2018

Это не может быть сделано из коробки на этом этапе - см. Этот открытый запрос: https://jira.mongodb.org/browse/SERVER-736

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

Вот несколько идей о том, где взять / основать требуемый код перевода из / в.

на основе регулярных выражений и парсинга (специально для MongoDB): https://github.com/gabrielelana/mongodb-shell-extensions/blob/master/src/jsonpath.js

В качестве альтернативы, это может быть использовано для анализа строк JSONPath в объектную модель, которую можно затем преобразовать в запросы MongoDB: https://github.com/json-path/JsonPath

...