如何从儿童中的儿童中的儿童中搜索Firebase数据库参考以获取特定值?

时间:2018-05-03 04:53:51

标签: firebase firebase-realtime-database vue.js

我正在尝试在Firebase数据库中的多个子项中搜索特定值。例如,我有一个名为collections的数据库,它包含不同的集合。这些集合包含不同的植物,这些植物含有植物标签,其中包含我感兴趣的某些值。

My Firebase JSON is included here

如何搜索特定的植物标签,说“水”,然后在网页上显示具有植物标签“水”的多个植物的特定植物名称和图像?

我在想像

这样的东西
file <- "./xxx.grib2"

### define the geographical coordinated to be extracted
lat_list <- c(36.8200, 43.2800, 52.7200)
lon_list <- c(85.8000, 87.3500, 95.8000)

var_list <- c("APCP", "DSWRF", "PRES")
lev_list = c("surface")

### read data
data <- ReadGrib(file, variable = var_list,  levels = lev_list)

for (i in 1: length(lat_list)) {
   cat("\n", "         ... extracting point",  i,  "/",  length(lat_list))
   data_extract <- BuildProfile(data, spatial.average = F,
                    lat = lat_list[i], lon = lon_list[i])
}

或者是否会像在所有收藏品中对所有植物儿童进行迭代一样,看看他们是否有一个名为“水”的植物标签?

我也在Vue.js的这个项目上工作。

3 个答案:

答案 0 :(得分:0)

可能有助于保持火层更浅,即。允许植物成为顶级文件,并为每个植物提供收集和植物标签的子属性。这应该允许orderbyChild通过他们的子植物标签=水来订购所有顶级植物。例如。

答案 1 :(得分:0)

正如Cuttsy27提出的那样,您可以对数据进行非规范化。实现您的需求的一个好方法是,除collections节点外,还有一个额外的主节点plantTags,并为每个plantTag提供一个子节点,其中包含具有所需信息的植物子节点:

- collections
    - ....
- plantTags
    - water
      - 1082 <- plantID
         - plantName: "........"
         - plantPic: "xxxxxxxx.png"
      - 362             
         - plantName: "........"
         - plantPic: "xxxxxxxx.png"
    - propagate
      - 362
         - plantName: "........"
         - plantPic: "xxxxxxxx.png"
      - 876             
         - plantName: "........"
         - plantPic: "xxxxxxxx.png"

以这种方式查询具有给定标签的所有植物将非常容易。

例如&#34; pure&#34; JavaScript的:

var tagToQuery = 'water';
var ref = database.ref('/plantTags/' + tagToQuery);
ref.once('value', function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
        var childData = childSnapshot.val();
        console.log(childData.name)
        // ...
    });
});

为了保持两个节点同步,请使用update方法(此处记录:https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields),该方法允许同时写入节点的特定子节点&#34; < / p>

(简单)您的数据结构示例:

  var updates = {};
  updates['/collections/0/plants/0'] =  ... ;
  updates['/plantTags/water/362] = ...;
  updates['/plantTags/propagate/362] = ...;

  return firebase.database().ref().update(updates);

答案 2 :(得分:0)

不要使用Array - &gt;请改用Dictionary。无法在Array中执行搜索。而不是 0,1,2 在任何地方都使用自动生成键。

然后你可以查询

  

集合 - &gt; collectionId - &gt;植物 - &gt; yourQuery

或重新定义您的数据库结构,就像您可以获取此内容一样。使用当前数据库,在知道要到达节点的collections (0, 1 or else)plants (0, 1 or else)的每个索引之前,无法获取数据。