2016-10-11 2 views
2

나는 간단한 자동차 데이터베이스 앱을 만들고있다. 사용자가 새 차를 추가하면이 갤러리 빈 필드 아래의 JSON 데이터 생성 : 이제Firebase 웹 앱에 새 하위 데이터를 삽입하는 방법은 무엇입니까?

{ 
    "name": "Cars", 
    "gallery": [{ 
     "img": "http://", 
     "title": "BMW" 
    }, { 
     "img": "http://", 
     "title": "Lexus" 
    }, { 
     "img": "http://", 
     "title": "Ferrari" 
    }], 
    "pageId": "23", 
    "storeURL": "/app/cars/gallery" 
} 

을 제가 응용 프로그램에서하고 싶은 사용자가 새 갤러리 이미지를 추가하는 경우는 새 자식을 추가해야합니다입니다 마지막 갤러리 사진 이후. 그래서 페라리 이후 그것은 새로운 물건을 삽입해야한다. 나는 모든 튜토리얼이 막 다른 골목으로 이어지는 것처럼 보이지 않을뿐만 아니라 set()이 모든 데이터를 대체 할 것이므로 update()을 사용하면이 데이터는 추가되며이 경우에는 추가되지 않는다고 명시되어 있습니다.

function add(){ 
    var data = [ 
    { 
     title: 'Mercedes', 
     img: 'http://' 
    } 
    ] 
    var postData = { 
    pageGallery: data 
    }; 
    var updates = {}; 
    updates['/app/cars/'] = postData; 
    firebase.database().ref().update(updates); 
    console.log('New car added'); 

} 

을 내가 변경하고 아이를 추가하는 경우 :

이 코드는 모든 데이터를 삭제

firebase.database().ref().child('gallery').update(updates); 

이 데이터를 할 아무것도하지 않습니다. 제발 도와 주실 수 있습니까?

답변

9

많은 블로그 게시물 (reasons not use arrays in our Firebase Database)을 참조하십시오. 지금 읽어주세요, 여기에서 기다릴게요 ...

어서 오십시오. 현재 접근 방식이 왜 고통스런 시간으로 이어지는 지 알게 되었으니, 이 어떻게이 데이터를 모델링해야하는지 살펴 보겠습니다. 블로그 게시물은 배열 기반 컬렉션에 대한 Firebase의 대규모 확장 성, 오프라인 준비 방식 인 푸시 ID에 대해 이미 설명했습니다.

documentation on reading and writing lists of data에서 설명한대로 push()으로 전화를 걸어 목록에 항목을 추가 할 수 있습니다.

그래서

이 차를 만드는 경우 :

var newCarRef = newStoreRef.child('gallery').push(); 
newCarRef.set({ 
    title: 'Mercedes', 
    img: 'http://' 
}) 

이는의 끝에 새 차/이미지를 추가합니다 :

다음
function addStore(){ 
    var rootRef = firebase.database().ref(); 
    var storesRef = rootRef.child('app/cars'); 
    var newStoreRef = storesRef.push(); 
    newStoreRef.set({ 
    name: "Cars", 
    "pageId": "23", 
    "storeURL": "/app/cars/gallery" 
    }); 
} 

그 가게의 갤러리에 이미지를 추가하기를 갤러리 (갤러리가 아직 존재하지 않는 경우).

+1

첫째, 의견을 주셔서 감사합니다. 실제 Google 개발자의 의견을 듣기에는 너무 겸손합니다. 당신이 옳은 대답에 관해서; 키를 사용할 때 Firebase 모범 사례를 사용하려고 노력할 것입니다. 감사! (나는 여전히 배열 오래된 학교 접근 방식을 좋아하지만) – TheBlackBenzKid

+0

젠장,이 새로운 API는 오래된 것보다 더 장황하다. 구글 .. – julesbou

2

누군가가 오류 처리와 함께 그것을 원하는 경우

  var rootRef = firebase.database().ref(); 
      var storesRef = rootRef.child('Lorelle/Visitors'); 
      var newStoreRef = storesRef.push(); 
      newStoreRef.set($scope.CarModal, 
      function(error) { 
       //NOTE: this completion has a bug, I need to fix. 
       if (error) { 
        console.log("Data could not be saved." + error); 
        Materialize.toast('Error: Failed to Submit' + error, 2000); 
       } else { 
       console.log("Data saved successfully."); 
       Materialize.toast('Data Submitted, Thank You.', 2000); 

        } 
       }); 
      } 
+1

코드를 보니 좋겠습니까 _without_ AngularJS – TheBlackBenzKid

+1

$ scope.CarModal을 JSON 객체 { name : "Cars", "pageId": "23", "storeURL": "/ app/자동차/갤러리 " }와 완벽하게 작동합니다. 요즘 순수 JS가 드물다. –

관련 문제