Нам нужно выполнить аналитику пользовательских объектов, хранящихся в Parse.Object. Эти объекты имеют ключи с пробелами. Обычно я просто использовал бы точечную нотацию: query.equalTo("metaData.custom_key", "custom value");
Однако точечная нотация не работает в случае с пробелами, как это было бы с собственным запросом MongoDB.
Плохие запросы с синтаксической ошибкой:
- С пробелами:
parseQuery.equalTo("metaData.key with spaces", "some value")
- С выходом:
parseQuery.equalTo("metaData.key\ with\ spaces", "some value")
- С заменой:
parseQuery.equalTo("metaData.key_with_spaces", "some value")
- С заменой:
parseQuery.equalTo("metaData["key with spaces"]", "some value")
- С заменой:
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. Постобработка метаданных после полного запроса (неэффективно; в крайнем случае).
Конечный результат, который нам нужен, - это подсчет значений для каждого уникального ключа в объекте метаданных.
Любой мысли?