Можно ли делать подстановочные запросы на Firebase? Например:Подстановочный запрос на Firebase?
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
Можно ли делать подстановочные запросы на Firebase? Например:Подстановочный запрос на Firebase?
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
No. Но любопытное.
Вы не можете выполнить подстановочный запрос, однако вы можете структурировать свои данные, которые позволят это сделать.
Например, говорят, что мы хотим, чтобы найти спички для пользователей, чье имя начинается с Лер
Вот наша структура
users
uid_0
name: "Leroy"
магазин разложившиеся данных в другом узле: Помните, что дисковое пространство дешево.
decomposed
uid_0
L: true
Le: true
Ler: true
Lero: true
Leroy: true
затем выполнить запрос на разложенном узле для значения верна для детей, равных Леры
ref.queryOrderedByChild("Ler").queryEqualToValue(true).observeEventType(.ChildAdded,
withBlock: { snapshot in
print(snapshot.key)
})
И snapshot.key будет uid_0
Поскольку Firebase не поддерживает wildcard search Я решил пойти с Apigee BaaS для нашей компании.
как это ответ на ваш вопрос? – mamu
Мне нужно было закрыть цикл на вопрос. Мне было ясно, что в Firebase решения не существует, поэтому мы решили просто изменить нашего поставщика BaaS. По сути, нет ответа на то, что мы можем видеть на основе документации и ответов на вопрос. – MoreScratch
Вы не можете объяснить, как она решила вашу проблему или действительно ли это ответ на ваш вопрос. – Learn2Code
Я знаю, что прошло какое-то время, но я думал, что другие могут быть заинтересованы. Вы можете «подделать» подстановочный поиск для таких вещей, как foo*
(так что в основном вы можете искать значения, начинающиеся с указанной строки).
для IOS & Swift это будет выглядеть следующим образом:
dbReference.child("person").queryOrdered(byChild: "name").queryStarting(atValue: "foo").queryEnding(atValue: "foo\u{f8ff}").observe(.childAdded) { (snapshot: FIRDataSnapshot) in
print("\(snapshot.key) - \(String(describing: snapshot.value))")
}
Что это делает, используя начальные и конечные значения для name
собственности, где конечный ключ равно к началу + очень высокой точке коды в диапазон Unicode. Поскольку это происходит после большинства обычных символов в Юникоде, запрос соответствует всем значениям, начинающимся с foo
.
Блестящий ответ друг .. ура –
Это интересный способ добиться того, что мне нужно. Проблема только в том, что мне нужно сделать подстановочный знак для любой части имени (например, * roy *). Кроме того, у меня будет ~ 200 тыс. Человек в моем дБ. Будет ли оно масштабироваться? – MoreScratch
Он может масштабироваться (Firebase является масштабируемой), однако, вероятно, это нереально для такого размера набора данных. Если вы просто искали что-то вроде автозаполнения, где вы печатаете первые несколько символов, например, фамилию, то это более реалистично. Мы создали класс ObjC, в котором мы можем указать имя, и оно будет декомпозировать имя во все комбинации, доступные для поиска, и затем сохраняет это в узле Firebase; с тем, что он чувствует себя довольно автоматизированным, но мы не пробовали работать с тысячами имен. Вероятно, это хороший вопрос для команды Firebase. – Jay
Представьте, что вы хотите выполнить поиск по шаблону во всех строковых полях вашей базы данных, нецелесообразно разлагать каждое значение каждого поля в N комбинациях. – Oswaldo