从React Native中的Fire base读取特定值

问题描述 投票:0回答:1

尝试使用SELECT之类的查询来检索数据但使用Firebase和React Native。

我的Firebase DB中有以下结构:

{
  "items" : {
    "1234" : {
      "value1" : 420,
      "value2" : 69,
      "ProductID" : 1234
    },
    "5678" : {
      "value1" : 250,
      "value2" : 12,
      "ProductID" : 5678
    },
    "91011" : {
      "value1" : 9001,
      "value2" : 5,
      "ProductID" : 91011
    }
  }
}

我使用以下代码尝试检索特定的产品ID

firebaseDB.ref("/items/")
    .orderByChild("ProductID")
    .equalTo(data)
    .once("value", snapshot => {
        if (snapshot.exists()){
            const userData = snapshot.val();
            console.log("INFO ::: Exists!", userData);
        }
        else {
            console.log("INFO ::: No match!!!");
        }

现在我的问题是我似乎无法选择数据。我认为这是我的查询的问题,因为我传递了ID 1234并且它没有找到此产品ID。

        .equalTo(data) <---- is how I'm passing the product id

这是我的日志中打印的内容:

[11:43:19] [FIREBASE] p:0: Listen called for /items{"ep":"1234","i":"ProductID","sp":"1234"}
[11:43:19] [FIREBASE] p:0: Listen on /itemsfor {"ep":"1234","i":"ProductID","sp":"1234"}
[11:43:19] [FIREBASE] p:0: {"r":2,"a":"q","b":{"p":"/items","q":{"sp":"1234","ep":"1234","i":"ProductID"},"t":1,"h":""}}
[11:43:19] [FIREBASE] p:0: handleServerMessage d {"p":"items","d":{"1234":{"value1":420,"value2":69,"ProductID":1234},"5678":{"value1":250,"value2":12,"ProductID":5678},"91011":{"value1":9001,"value2":5,"ProductID":91011}}}
[11:43:19] [FIREBASE] event: /items:value:null
[11:43:19] [FIREBASE] p:0: Unlisten called for /items {"ep":"1234","i":"ProductID","sp":"1234"}
[11:43:19] [FIREBASE] p:0: Unlisten on /items for {"ep":"1234","i":"ProductID","sp":"1234"}

也许我应该尝试修改我在调用.once时传递的“价值”,但我不确定......任何想法?

谢谢

解决了问题:

穆罕默德很好地​​给出了一个解决方案,它允许检索数据。我忽略的是我使用String来查询我的数据,我正在寻找的数据是一个数字。

react-native react-navigation
1个回答
0
投票

你可以试试这个

const data = 1234;
firebase
  .database()
  .ref()
  .child('items')
  .orderByChild('ProductID')
  .equalTo(data)
  .once('value')
  .then(snapShot => {
    let matchingProducts = [];
    snapShot.forEach(child => {
      matchingProducts = [child.val(), ...matchingProducts];
    });
    console.log("matchingProducts",matchingProducts);
    return matchingProducts;
  });
© www.soinside.com 2019 - 2024. All rights reserved.