如何在云代码中查询firebase实时数据库
How to query firebase realtime database in cloud code
我正在使用 Firebase 云代码和 Firebase 实时数据库。
我的数据库结构是:
-users
-userid32
-userid4734
-flag=true
-userid722
-flag=false
-userid324
我只想查询'flag'字段为'true'的用户。
我目前正在做的是遍历所有用户并逐一检查。但是这样效率不高,因为我们在数据库中有很多用户,函数到 运行:
需要 10 多秒
const functions = require('firebase-functions');
const admin = require("firebase-admin");
admin.initializeApp(functions.config().firebase);
exports.test1 = functions.https.onRequest((request, response) => {
// Read Users from database
//
admin.database().ref('/users').once('value').then((snapshot) => {
var values = snapshot.val(),
current,
numOfRelevantUsers,
res = {}; // Result string
numOfRelevantUsers = 0;
// Traverse through all users to check whether the user is eligible to get discount.
for (val in values)
{
current = values[val]; // Assign current user to avoid values[val] calls.
// Do something with the user
}
...
});
是否有更有效的方法来进行此查询并仅获取相关记录? (而不是全部获取并一一检查?)
您将为此使用 Firebase 数据库查询:
admin.database().ref('/users')
.orderByChild('flag').equalTo(true)
.once('value').then((snapshot) => {
const numOfRelevantUsers = snapshot.numChildren();
当您需要遍历子节点时,请不要将生成的快照视为普通的 JSON 对象。虽然这可能在这里起作用,但当您订购具有实际范围的值时,它会产生意想不到的结果。而是使用内置的 Snapshot.forEach()
方法:
snapshot.forEach(function(userSnapshot) {
console.log(userSnapshot.key, userSnapshot.val());
}
请注意,所有这些都是相当标准的 Firebase 数据库用法,因此我建议为此 Web SDK and the Admin SDK 在文档中多花一些时间。
我正在使用 Firebase 云代码和 Firebase 实时数据库。
我的数据库结构是:
-users
-userid32
-userid4734
-flag=true
-userid722
-flag=false
-userid324
我只想查询'flag'字段为'true'的用户。
我目前正在做的是遍历所有用户并逐一检查。但是这样效率不高,因为我们在数据库中有很多用户,函数到 运行:
需要 10 多秒const functions = require('firebase-functions');
const admin = require("firebase-admin");
admin.initializeApp(functions.config().firebase);
exports.test1 = functions.https.onRequest((request, response) => {
// Read Users from database
//
admin.database().ref('/users').once('value').then((snapshot) => {
var values = snapshot.val(),
current,
numOfRelevantUsers,
res = {}; // Result string
numOfRelevantUsers = 0;
// Traverse through all users to check whether the user is eligible to get discount.
for (val in values)
{
current = values[val]; // Assign current user to avoid values[val] calls.
// Do something with the user
}
...
});
是否有更有效的方法来进行此查询并仅获取相关记录? (而不是全部获取并一一检查?)
您将为此使用 Firebase 数据库查询:
admin.database().ref('/users')
.orderByChild('flag').equalTo(true)
.once('value').then((snapshot) => {
const numOfRelevantUsers = snapshot.numChildren();
当您需要遍历子节点时,请不要将生成的快照视为普通的 JSON 对象。虽然这可能在这里起作用,但当您订购具有实际范围的值时,它会产生意想不到的结果。而是使用内置的 Snapshot.forEach()
方法:
snapshot.forEach(function(userSnapshot) {
console.log(userSnapshot.key, userSnapshot.val());
}
请注意,所有这些都是相当标准的 Firebase 数据库用法,因此我建议为此 Web SDK and the Admin SDK 在文档中多花一些时间。