Разбор запроса на вложенные ключи с пробелами - PullRequest
0 голосов
/ 25 февраля 2020

Нам нужно выполнить аналитику пользовательских объектов, хранящихся в Parse.Object. Эти объекты имеют ключи с пробелами. Обычно я просто использовал бы точечную нотацию: query.equalTo("metaData.custom_key", "custom value"); Однако точечная нотация не работает в случае с пробелами, как это было бы с собственным запросом MongoDB.

Плохие запросы с синтаксической ошибкой:

  1. С пробелами: parseQuery.equalTo("metaData.key with spaces", "some value")
  2. С выходом: parseQuery.equalTo("metaData.key\ with\ spaces", "some value")
  3. С заменой: parseQuery.equalTo("metaData.key_with_spaces", "some value")
  4. С заменой: parseQuery.equalTo("metaData["key with spaces"]", "some value")
  5. С заменой: parseQuery.equalTo("metaData.'key with spaces'", "some value")

Все это приводит к ошибкам, таким как:

ParseError {
  code: 105,
  message: 'Invalid key name: metaData.\'key with spaces\'' }

Например, ParseClass.metaData:

{ 
  "key with spaces":"some value",
  "key 2": "value 2"
}

Эти решения не предпочтительно: 1. Изменение схемы метаданных, чтобы в ключах не было пробелов, поскольку у нас есть миллионы объектов, работающих в этом формате, и сценарии производственной записи рискованны. 2. Использование mon goose или собственных запросов MongoDB, потому что Parse.Pointer хранятся в MongoDB как строки, но нам нужны отношения. 3. Постобработка метаданных после полного запроса (неэффективно; в крайнем случае).

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

Любой мысли?

...