我正在编写一个使用Firebase作为数据库的HTML / JavaScript应用程序。
我的数据结构有点像这样:
steps/
- GUID
-- tripId
-- name
-- description
-- order
-- launchDate
我想从 tripId 匹配特定值(在变量中传递)的步骤中选择任何项目。然后我想通过降序 order 来订购结果。
我更习惯使用T-SQL类型语法,因此在实时数据库的世界中感到困惑。
以下是我的代码现在的样子片段。
var steps = function readSteps(format, tripId) {
var stepsRef;
stepsRef = firebase.database().ref('steps/');
stepsRef.orderByChild('order').on('value', function (response) {
// DO SOME LOGIC HERE WITH 'response' DATA
});
}
我不知道如何过滤这些结果,我也不知道如何轻松地进行降序排序。 order 是一个整数。
答案 0 :(得分:2)
要获取订单42的所有步骤,您需要查询:
stepsRef = firebase.database().ref('steps/');
stepsRef.orderByChild('order').equalTo(42).on('value', function (snapshot) {
snapshot.forEach(function(stepSnapshot) {
console.log(stepSnapshot.key, stepSnapshot.val());
});
});
但如果您总是要查找订单的步骤,那么最好不要对JSON进行不同的建模:
orderSteps
order42
step1: ...
step2: ...
step3: ...
order43
step1: ...
step2: ...
这使您可以检索订单的步骤,而无需查询:
stepsRef = firebase.database().ref('orderSteps/order42');
stepsRef.on('value', function (snapshot) {
snapshot.forEach(function(stepSnapshot) {
console.log(stepSnapshot.key, stepSnapshot.val());
});
});
如果也想要在子属性上订购此结果,它将变为:
stepsRef.orderByChild("field").on('value', function (snapshot) {
我建议阅读NoSQL data modeling并查看Firebase for SQL developers以了解有关在NoSQL数据库中建模数据的更多信息。