2016-09-26 2 views
2

Угловое приложение с использованием AngularFire2. Я пытаюсь запросить firebase на дочернем объекте, а не только на свойство дочерней строки. Выполняется запрос с помощью свойства дочерней строки, но как я могу запросить весь объект.Запрос AngularFire2 по детскому объекту

Этот код работает

// Given the following firebase data structure 
    httpCache: { 
     {ID}: { 
      url: 'www.fakeurl', 
      otherProperties: {} 
     } 
    } 

    // This code will return results if exists where the url matches 
    this.af.database.list('httpCache', { 
     query: { 
      orderByChild: 'url', 
      equalTo: 'www.fakeurl' 
     } 
    }).subscribe(x => { 
     if (x.length > 0) { console.log('match found!'); } 
    }); 

Этот код не работает:

// Given the following firebase data structure 
    httpCache: { 
     {ID}: { 
      request: { 
       url: 'www.fakeurl', 
       params: 'id=1' 
      }, 
      otherProperties: {} 
     } 
    } 

    // This code throws an exception 
    let request = { 
     url: 'www.fakeurl', 
     params: 'id=1' 
    }; 
    this.af.database.list('httpCache', { 
     query: { 
      orderByChild: 'request', 
      equalTo: request 
     } 
    }).subscribe(x => { 
     if (x.length > 0) { console.log('match found!'); } 
    }); 

Вот исключение:

Query: First argument passed to startAt(), endAt(), or equalTo() cannot be an object. 

Я пытаюсь использовать 2-ое решение, показанное здесь где критерии фильтра помещаются в дочерний объект, содержащий все свойства фильтра: Query based on multiple where clauses in firebase

+0

Быстрый удар ниже. Если вы делитесь фрагментом своего JSON (как текст, без скриншотов), я могу сопоставить код с этим. Но этот подход будет описан ниже. –

ответ

0

Вы не можете запросить объект. Так что это является недопустимым и приводит к ошибке:

let request = { 
    url: 'www.fakeurl', 
    params: 'id=1' 
}; 
this.af.database.list('httpCache', { 
    query: { 
     orderByChild: 'request', 
     equalTo: request 
    } 
}) 

Как я отвечаю на the question you linked, вы можете добавить свойство, которое содержит объединенные значения, которые вы хотите запросить на. Но тогда вам также понадобится объединить значения в вашем фактическом запросе, который вы не делаете.

Это невозможно сказать, как вы объединили значения, но сказать, что вы просто сцепляются в URL и Params, вы бы запросить как:

let request = 'www.fakeurl_id=1' 
this.af.database.list('httpCache', { 
    query: { 
     orderByChild: 'request', 
     equalTo: request 
    } 
}) 
+0

Я поместил свои критерии в конкатенированное поле строки, и он работает таким образом, спасибо –

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

  • Нет связанных вопросов^_^