Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase实时数据库如何在web应用程序中基于可用性筛选数据_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase实时数据库如何在web应用程序中基于可用性筛选数据

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" : {

这是我的firebase产品数据库结构

{
  "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数据替换了数据图像。