2017-10-14 5 views
1

내 중포 기지 데이터베이스 구조는 다음과 같습니다 변경됩니다 중포 기지의 클라우드 기능을 쓰기 :어떻게 시간을 기준으로 데이터

-events 
    -uniqueEventId 
     -endTimeStamp: 1507949100 
     -active: true 
    -uniqueEventId2 
     -endTimeStamp: 1807949100 
     -active: true 
    -uniqueEventId3 
     -endTimeStamp: 1900949100 
     -active: true 

을 어떻게 현재 시간 전에 타임 스탬프를 가진 모든 이벤트를 얻을 수있는 기능을 흐리게 할 활성 상태를 false로 설정합니다.

답변

3

이 경우 클라우드 기능을 어떻게 실행 시킬지 잘 모르겠습니다. HTTP 트리거가 필요하다고 가정하고 브라우저 또는 웹 훅에서 호출 할 수 있습니다. 의미

당신은 기본 HTTP-triggered function 시작 :

exports.updateStatus = functions.https.onRequest((req, res) => { 
    // ... 
    res.status(200).send("done"); 
}); 

다음가이 함수 내에서 실시간 데이터베이스에 액세스해야합니다. 당신은 당신에게 당신의 코드 내에서 쉽게 관리 액세스를 제공하는 Firebase Admin SDK을 사용합니다 그렇게하려면

const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

exports.updateStatus = functions.https.onRequest((req, res) => { 
    // ... 
    res.status(200).send("done"); 
}); 

을 그리고 우리는 데이터를 변경하는 실제 코드에 도착. 이것은 표준 데이터베이스 액세스 코드이며 클라우드 기능과는 거의 관계가 없습니다. 그것은 많은 비동기 쓰기 작업을 다루고 있기 때문에, 마지막 코드가 조금 까다 롭습니다

const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

exports.updateStatus = functions.https.onRequest((req, res) => { 
    let now = Date.now(); 
    let query = admin.database().ref("events").orderByChild("timestamp").startAt(now); 
    query.once("value").then(function(snapshot) { 
    var promises = []; 
    snapshot.forEach(function(child) { 
     promises.push(child.ref.update({ active: false })); 
    }) 
    Promise.all(promises).then(function() { 
     res.status(200).send("done"); 
    }); 
    }); 
}); 

한다 :이 경우는 결과를 통해 타임 스탬프, 루프를 조회하고 active 속성을 설정합니다. 클라우드 함수는 클라이언트에 응답을 보낸 후에 함수를 종료하므로 모든 비동기 쓰기가 완료된 후에 만 ​​응답을 보내는 것이 중요합니다. 나는 Promise.all()을 사용합니다. 비동기 특성에 대한 자세한 내용은 the documentation, this blog postthis video을 참조하십시오.

자세한 내용은 documentation for the Firebase Admin SDK을 공부하는 것이 좋습니다.

관련 문제