2016-04-01 1 views

ответ

2

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

+2

Это интересный способ добиться того, что мне нужно. Проблема только в том, что мне нужно сделать подстановочный знак для любой части имени (например, * roy *). Кроме того, у меня будет ~ 200 тыс. Человек в моем дБ. Будет ли оно масштабироваться? – MoreScratch

+0

Он может масштабироваться (Firebase является масштабируемой), однако, вероятно, это нереально для такого размера набора данных. Если вы просто искали что-то вроде автозаполнения, где вы печатаете первые несколько символов, например, фамилию, то это более реалистично. Мы создали класс ObjC, в котором мы можем указать имя, и оно будет декомпозировать имя во все комбинации, доступные для поиска, и затем сохраняет это в узле Firebase; с тем, что он чувствует себя довольно автоматизированным, но мы не пробовали работать с тысячами имен. Вероятно, это хороший вопрос для команды Firebase. – Jay

+1

Представьте, что вы хотите выполнить поиск по шаблону во всех строковых полях вашей базы данных, нецелесообразно разлагать каждое значение каждого поля в N комбинациях. – Oswaldo

-2

Поскольку Firebase не поддерживает wildcard search Я решил пойти с Apigee BaaS для нашей компании.

+3

как это ответ на ваш вопрос? – mamu

+0

Мне нужно было закрыть цикл на вопрос. Мне было ясно, что в Firebase решения не существует, поэтому мы решили просто изменить нашего поставщика BaaS. По сути, нет ответа на то, что мы можем видеть на основе документации и ответов на вопрос. – MoreScratch

+0

Вы не можете объяснить, как она решила вашу проблему или действительно ли это ответ на ваш вопрос. – Learn2Code

6

Я знаю, что прошло какое-то время, но я думал, что другие могут быть заинтересованы. Вы можете «подделать» подстановочный поиск для таких вещей, как 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.

+0

Блестящий ответ друг .. ура –