2017-11-28 3 views
0

내 RTDB에서 다음 설정에서 {"length": "2","height": "4"},{"length": "1.5","height": "6"},{"length": "3","height": "5.5"},{"length": "2","height": "3.2"}을 반환하는 방법을 알아 내려고하고 있습니다. 무엇을 포함하는 것을 잊고 있습니까?Firebase 함수 데이터베이스 'child_added'첫 번째 자식 만 반환 (많은 어린이들 중)

{ 
    "widgets": { 
     "widget01": { 
      "length": "2", 
      "height": "4" 
     }, 
     "widget02": { 
      "length": "1.5", 
      "height": "6" 
     }, 
     "widget03": { 
      "length": "3", 
      "height": "5.5" 
     }, 
     "widget04": { 
      "length": "7", 
      "height": "3.2" 
     } 
    } 
} 
내 기능은

...

exports.widgets = functions.database.ref().onUpdate(event => { 
    admin.database().ref('/widget').once('child_added', snapshot =>{ 
     let data = snapshot.val() 
     console.log(data) 
     return ({data}) 
    }); 
}); 

을하지만 이것은 단지 "[i]를 위젯"내 {"length": "2","height": "4"} 아니라 모든 아이를 반환합니다. 나는 ...

이 ... child_added 한 번 각 기존 아이 을 트리거 ...

PS를 생각했다. child_added 대신 value을 사용하려고했습니다. 그러나 나는 동적이기 때문에 .child() 안에 "widget [i]"를 참조하는 방법을 알 수 없었다.

exports.widgets = functions.database.ref().onUpdate(event => {  
    admin.database().ref('/widgets').child(<<how to structure?>>).once('value', snapshot =>{ 
     let data = snapshot.val() 
     console.log(data) 
     return ({data}) 
    }); 
}); 

답변

1

당신이 once('child_added'를 호출하고 있기 때문에, 당신의 콜백은 한 번만 트리거됩니다 위치에서 첫 번째 자식을 위해 당신이 리스너를 연결합니다.

클라우드 기능에있는 모든 하위 항목이 필요하면 실제로 once('value'을 사용해야합니다. 그러면 일치하는 모든 하위 노드가 스냅 샷에 한 번에 제공됩니다. snapshot.forEach()와 그 자녀 이상 그런 다음 루프 :

exports.widgets = functions.database.ref().onUpdate(event => {  
    admin.database().ref('/widgets').once('value', snapshot =>{ 
     snapshot.forEach((child) => { 
      let data = child.val() 
      console.log(data) 
      //return ({data}) 
     }); 
    }); 
}); 

난 당신이 생각 반환하려고하는지 모르겠어요. 여러 명의 자녀가있을 수 있으므로 어떤 자녀를 돌려주고 싶습니까?

+0

당신은 인명 구조 원입니다. 나는이 사실을 내가 인정하기를 원하는 것보다 오래 알아 내려고 노력해왔다. 나는 실제로 모든 아이들을 돌려주고 싶었다. 필자는 필자의 요구에 따라 조금 더 수정했다 :'[[2,4], [1.5, 6]]'. –