【发布时间】:2018-03-02 14:23:08
【问题描述】:
我正在尝试根据 Firebase 数据库中的一些数据生成每周报告,并为此使用 Firebase 云功能。 时间戳实际上存在于子节点中。但是,我无法获取任何数据。
我的数据库结构如下:
{
"threads" : {
"228440-1704-4bba-87d7-27327" : {
"messages" : {
"8c98a76c-4456-4326-8e18-6d036b40bfa4" : {
"time" : 1519997400,
"payload": "someData"
},
"898376c-4456-4326-8e18-6deb4wr0bfa4" : {
"time" : 1517174415302,
"payload": "someData"
}
},
"details" : {
"created_At": 1514134435602
}
}
根据详细节点获取数据:
我正在尝试获取我的日期范围内存在threads/details/created_at 的线程(比如上周)。
根据消息节点获取数据: 除此之外,在另一个查询中,我想获取上周的所有消息(在不同线程中)。我想即使在这种情况下我也必须通过以下方式获取线程:
//fetch threads where message.time exists in last week
我正在使用 Firebase 云函数,我的代码如下:
exports.generateReportFromThreads = functions.https.onRequest((req, res) => {
var ref = admin.database().ref('threads');
var startingTime = new Date('Mon, 25 Dec 1995 13:30:00 GMT').getUnixTime();
var currentDate = new Date('Fri, 2 Mar 2018 13:30:00 GMT').getUnixTime();
return ref.orderByChild('details/created_at').startAt(startingTime).endAt(currentDate).once("value", (threadSnapshot) => {
var numberOfThreads = threadSnapshot.numChildren()
var totalMessages = 0
threadSnapshot.forEach((snapshot) => {
var ref = snapshot.child('messages')
var messagesPerThread = ref.numChildren()
totalMessages = totalMessages + messagesPerThread
res.send(`
<!doctype html>
<html>
<body>
<p>Total number of threads = ${numberOfThreads}</p>
<p>Total messages = ${totalMessages}</p>
</body>
</html>`
);
});
});
我在我的数据库中应用了以下索引:
【问题讨论】:
-
因为这个
orderByChild('details/created_at').startAt(startingTime).endAt(currentDate)不存在 -
@PeterHaddad,感谢您的回复。只是我正在测试并试图以某种方式获取一些东西。我不知道该怎么做。可以指导一下吗?
标签: node.js firebase firebase-realtime-database google-cloud-functions