Javascript Firebase实时数据库如何在web应用程序中基于可用性筛选数据
这是我的firebase产品数据库结构Javascript Firebase实时数据库如何在web应用程序中基于可用性筛选数据,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,这是我的firebase产品数据库结构 { "Available" : "1", "BrandID" : "26", "ProductID" : "245", "ProductImagePath" : "/images/palmolive/refreshing-lemon.png", "ProductName" : "Refreshing Lemon Shaving Cream", "SubCategoryID" : "23", "Variants" : {
{
"Available" : "1",
"BrandID" : "26",
"ProductID" : "245",
"ProductImagePath" : "/images/palmolive/refreshing-lemon.png",
"ProductName" : "Refreshing Lemon Shaving Cream",
"SubCategoryID" : "23",
"Variants" : {
"245_26" : {
"Available" : "1",
"MRP" : "55.00",
"SellPrice" : "54.00",
"VariantID" : "26"
},
"245_42" : {
"Available" : "1",
"MRP" : "30.00",
"SellPrice" : "29.00",
"VariantID" : "42"
}
}
}
我想得到所有的产品和它们的变体,如果它们都是1。这是获取数据的代码
var productsRef = firebase.database().ref('products');
productsRef.orderByChild("Available").equalTo("1").once('value', function(snapshot) {
// dispplay logic
});
它为我提供了所有可用产品=1的产品和该产品的所有变体。我只需要该产品的那些变体,它们可用=1而不是0
有人能帮我找到吗?你不能用Firebase查询这种类型的结构。与NoSQL数据库一样,您必须重新构造数据以允许应用程序所需的查询 因此,如果您想按可用性查询产品变体,您应该按可用性存储产品变体列表。有很多方法可以做到这一点,最好的方法取决于你的应用程序。下面我将调查两个最流行的选项: 按可用性存储变体 使用此选项,您可以通过简单的直接查找来访问Available=1的所有变体:
var productsRef = firebase.database().ref('products');
var availabilityRef = firebase.database().ref('availability');
availabilityRef.child("1").once('value', function(snapshot) {
snapshot.forEach(function(variantKey) {
productsRef.child(variantKey.val()).once('value', function(variantSnapshot) {
// display available variant in UI
});
})
});
将变量存储在具有可用性的列表中
或者,您可以存储一长串变体及其可用性:
"variants": {
"245_26": {
path: "245/Variants/245_26",
Available: 1
},
"245_42": {
path: "245/Variants/245_42",
Available: 1
}
}
此结构可用于查询:
var productsRef = firebase.database().ref('products');
var variantsRef = firebase.database().ref('variants');
variantsRef.orderBy('Available').equalTo(1).once('value', function(snapshot) {
snapshot.forEach(function(variantKey) {
productsRef.child(variantKey.val().path).once('value', function(variantSnapshot) {
// display available variant in UI
});
})
});
这个选项很有效,但是(稍微)更多的工作为数据库,因为它将不得不考虑所有的变体。如果您已经知道需要存储数十万个项目,我建议使用第一种结构,它允许直接查找具有特定可用性的所有项目。
您无法使用Firebase查询这种类型的结构。与NoSQL数据库一样,您必须重新构造数据以允许应用程序所需的查询 因此,如果您想按可用性查询产品变体,您应该按可用性存储产品变体列表。有很多方法可以做到这一点,最好的方法取决于你的应用程序。下面我将调查两个最流行的选项: 按可用性存储变体 使用此选项,您可以通过简单的直接查找来访问Available=1的所有变体:var productsRef = firebase.database().ref('products');
var availabilityRef = firebase.database().ref('availability');
availabilityRef.child("1").once('value', function(snapshot) {
snapshot.forEach(function(variantKey) {
productsRef.child(variantKey.val()).once('value', function(variantSnapshot) {
// display available variant in UI
});
})
});
将变量存储在具有可用性的列表中
或者,您可以存储一长串变体及其可用性:
"variants": {
"245_26": {
path: "245/Variants/245_26",
Available: 1
},
"245_42": {
path: "245/Variants/245_42",
Available: 1
}
}
此结构可用于查询:
var productsRef = firebase.database().ref('products');
var variantsRef = firebase.database().ref('variants');
variantsRef.orderBy('Available').equalTo(1).once('value', function(snapshot) {
snapshot.forEach(function(variantKey) {
productsRef.child(variantKey.val().path).once('value', function(variantSnapshot) {
// display available variant in UI
});
})
});
这个选项很有效,但是(稍微)更多的工作为数据库,因为它将不得不考虑所有的变体。如果您已经知道需要存储数十万项,我建议使用第一种结构,它允许直接查找具有特定可用性的所有项。
您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库控制台中的导出按钮轻松获得该文本。将JSON作为文本使其具有可搜索性,使我们能够轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。@FrankvanPuffelen,根据要求,我将数据图像替换为实际的JSON数据。您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库控制台中的导出按钮轻松获得该文本。将JSON作为文本使其具有可搜索性,允许我们轻松地使用它来测试您的实际数据,并在我们的答案中使用它,一般来说,这是一件好事。@FrankvanPuffelen,根据请求,我用实际的JSON数据替换了数据图像。