2015-08-31 4 views
1

У меня есть ряд записей в Firebase, как эти:Firebase - получить все записи, который содержит ключ

{ 
    records: { 
    n1: { 
     f1: 1, 
     f2: 0, 
     f3: 1 
    }, 
    n2: { 
     f1: 0, 
     f4: 1, 
     f5: 0 
    } 
    } 
} 

Я хочу, используя индекс, чтобы получить аль записи, которые содержат ключ f1 независимо от ее содержания может быть (0 или 1)

Есть ли способ сделать это с помощью Firebase?

ответ

1

Запросы Firebase не могут проверить наличие свойства, только для их стоимости.

Самый простой способ обойти это ограничение - добавить свойство со значением, которое сигнализирует о существовании свойства, которое вы ищете. Да ... это, наверное, проще понять на примере:

{ 
    "records": { 
     "n1": { 
      "f1": 1, 
      "f2": 0, 
      "f3": 1, 
      "has_f1": true 
     }, 
     "n2": { 
      "f1": 0, 
      "f4": 1, 
      "f5": 0, 
      "has_f1": true 
     }, 
     "n3": { 
      "f7": 8, 
      "f8": 0 
     } 
    } 
} 

С этим вы можете запросить:

ref.child('records') 
    .orderByChild('has_f1') 
    .equalTo(true) 
    .on('child_added', function(snapshot) { 
     console.log(snapshot.val()); 
    }) 
+1

Не может ли это быть сделано без дополнительного поля с помощью 'ref.child ('записи'). orderByChild ('f1'). startAt (0) '? – Kato

+0

Yup. Мне не приходило в голову так поступать, но вы можете начать с минимального значения для типа, который вы там храните. Возможно, стоит добавить это как альтернативный ответ. –

+0

Я предпочел бы просто добавить его в один из авторитетных ответов в качестве другого варианта. – Kato

Смежные вопросы