【问题标题】:equalTo returning null from Firebase?equalTo 从 Firebase 返回 null?
【发布时间】:2016-05-09 02:58:58
【问题描述】:

在我的 React Native 应用程序中,我目前正在尝试从数据库中提取所有 selected 属性设置为“true”的项目。但是,当我记录此查询的结果时,它们都以null 的形式返回(即使预期的响应应该返回两个对象)。我的相关代码以及 Firebase 结构包含在下面,如果您发现任何内容,请告诉我。

const rootRef = new Firebase(`${ config.FIREBASE_ROOT }`)

var queryRef = rootRef.orderByChild("items/selected");

var solution = queryRef.equalTo("true").once('value', function(snap) {
    console.log(snap.val())
 });

Firebase JSON:

"items": 
[
    {
    "title":"ball",
    "selected": "false"
    },

    {
    "title":"dog",
    "selected": "true"
    },

    {
    "title":"phone",
    "selected": "false"
    },

    {
    "title":"cup",
    "selected": "true"
    }
], 

【问题讨论】:

  • 在下面回答。但我也注意到您将项目作为数组存储在 JSON 树中,这通常会导致问题。请务必阅读相关的section in the Firebase documentation
  • @FrankvanPuffelen 谢谢——但我认为在 JSON 中,如果您有多个相同类型的对象,它们应该存储为数组吗?在这种情况下,我的每个项目都具有相同的属性(相同类型的对象),所以我认为我需要将它们存储在一个数组中。我还应该怎么做呢?
  • 阅读(关于存储数据列表的 Firebase 文档](firebase.com/docs/web/guide/saving-data.html#section-push)。事实上,我强烈建议您完整阅读该指南。在那里花费几个小时,将节省更多时间行。
  • @FrankvanPuffelen 太好了,感谢您将我指向此文档。很有帮助!

标签: database reactjs firebase react-native


【解决方案1】:

当您对某个位置运行 Firebase 查询时,它会获取该位置下的每个子节点,然后评估您指定的条件。如果你把items 下的每个孩子都带走,你会发现那里没有items/selected 的路径。

您的查询是:

var itemsRef = rootRef.child("items");
var queryRef = itemsRef.orderByChild("selected");

【讨论】:

  • 刚刚进行了修改(并且还更改了我的 JSON 以删除数组),这似乎仍然返回空值。
【解决方案2】:

你应该使用

where("selected" = true)

而不是equalTo()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2017-02-19
    • 2017-11-26
    相关资源
    最近更新 更多