2017-10-27 1 views
0

To-do 응용 프로그램을 빌드하여 Firebase에 대해 배우고 특정 목록에 항목을 추가하기 위해 사용자가 제공 한 항목을 해당 슬러그로 찾아서 추가하고 싶습니다.Firebase "배열"에 하위 항목을 추가하는 방법은 무엇입니까?

database.ref('lists').orderByChild('slug').equalTo(listSlug).child('items').push({ 
    title: values.itemTitle 
}) 

이 다음과 같은 오류 발생 :

TypeError: __WEBPACK_IMPORTED_MODULE_1__utils_firebase__.a.ref(...).equalTo(...).child is not a function 

매개 변수가 올바른지은 listSlug가 있어야 할 무엇이다, 그리고 values이 있어야하는데 무엇 현재, 나는 다음과 같은 쿼리를 가지고 게다가. 목록을 검색 할 때 주어진 슬러그로 항목을 찾으면 쿼리가 작동하지만 항목을 추가하는 방법을 찾지 못하는 것 같습니다.

편집 : saving the world, one item at a time

+0

이 배열이 저장된 현재 데이터베이스 구조의 예를 공유 할 수 있습니까? – Grimthorr

+0

@Grimthorr, 거기 있네. – zcserei

답변

1

저장 데이터를 push(), set() 또는 update()는 방법이다 사용하여 데이터베이스 :

요청에 따라

, 여기에 데이터베이스와 내가 추가 할 무엇 저장되지 않은 예입니다 Reference 인터페이스는 데이터베이스에서 데이터를 검색하는 추가 방법을 제공합니다.

이제 ReferenceorderByChild() 또는 equalTo() 메서드를 호출하면 Query이 대신 반환됩니다. Reference과 달리 Query은 데이터베이스에서 데이터를 검색하는 데만 사용할 수 있습니다.

데이터를 데이터베이스로 푸시하려면 먼저 데이터베이스 내에서 배열 노드의 정확한 위치를 알아야하고 database.ref(...).child(...)을 사용하여 Reference을 생성해야합니다. 단순히

database.ref('lists').child('listId1').child('items').push({ 
    title: values.itemTitle 
}) 

을 또는 : : 배열이 /lists/listId1/items에있는 경우

예를 들어, 사용하는 것이 필요할 것

database.ref('lists/listId1/items').push({ 
    title: values.itemTitle 
}) 

을 당신의 위치를 ​​모르는 경우 노드를 찾으려면 데이터베이스를 먼저 찾아야합니다. 또는 쿼리를 사용하여 이전에 데이터를로드 한 경우 DataSnapshot#ref (또는 DataSnapshot#key 키)을 사용하여 결과에서 Reference을 얻을 수 있으므로 푸시하기 전에 위치를 다시 쿼리 할 필요가 없습니다.

+0

ID를 별도로 조회해야합니까? 슬러그를 기반으로 데이터베이스를 쿼리하고 ID를 얻은 다음 항목을 밀어 넣으시겠습니까? – zcserei

+1

@zcserei 맞습니다. ID를 모르는 경우 먼저 데이터베이스를 쿼리하여 ID를 찾아야합니다. 쿼리를 사용하여 이전에 데이터를로드 한 경우 ['DataSnapshot # key'] (https://firebase.google.com/docs/reference/js/firebase.database)를 사용하여 결과에서 키를 얻을 수 있습니다. DataSnapshot # 키)을 생성 한 다음 나중에 사용할 수 있도록 변수에 저장합니다. 따라서 레코드를 추가하기 전에 키를 다시 쿼리해야합니다. 나는 이것을 내 대답에 추가 할 것이다. – Grimthorr

+0

고맙습니다. 답변을 기반으로하는 솔루션이 있는데, 참조 및 쿼리 개체 간의 차이점을 해결하면 많은 도움이되었습니다. – zcserei

관련 문제