Android firebase检索具有空字段的节点
我更新了我项目的域类,与以前的版本发生了一些不兼容 我正在摆脱他们中的大多数,但有一种情况是有问题的 我需要从一个特定的分支中查找所有firebase节点,其指定字段==null 让我解释一下背景: 我在我的域类中添加了一些新字段以存储在firebase中。。。所以之前存储的所有数据都将具有这些字段的Android firebase检索具有空字段的节点,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我更新了我项目的域类,与以前的版本发生了一些不兼容 我正在摆脱他们中的大多数,但有一种情况是有问题的 我需要从一个特定的分支中查找所有firebase节点,其指定字段==null 让我解释一下背景: 我在我的域类中添加了一些新字段以存储在firebase中。。。所以之前存储的所有数据都将具有这些字段的null值,我想检索这些节点。。。有没有简单的方法(请不要转储整个数据库) 这是我的模式: root -users --a ---newField /*many other irrelevant f
null
值,我想检索这些节点。。。有没有简单的方法(请不要转储整个数据库)
这是我的模式:
root
-users
--a
---newField
/*many other irrelevant fields*/
--b
---newField
//so on and so on
我正在尝试这样做:
App.getDatabaseInstance().getReference("users").orderByChild("newField").equalTo(null).addListenerForSingleValueEvent(listener);
但它总是返回空的,我知道有些节点存在这种情况
有什么方法可以达到我的目的吗?您无法查询数据库中不存在的子项。但您可以做的是删除
equalTo(null)
语句,然后首先将结果与缺少newField
子项的数据进行排序。迭代结果集,直到到达一个已经有newField
集的条目,这意味着您已经处理了没有的所有数据
请参阅以下文档:
任何没有我们正在查询的子键的节点都将使用null值进行排序,这意味着它将在排序中排在第一位。有关数据排序方式的详细信息,请参阅
无法查询数据库中不存在的子项。但您可以做的是删除
equalTo(null)
语句,然后首先将结果与缺少newField
子项的数据进行排序。迭代结果集,直到到达一个已经有newField
集的条目,这意味着您已经处理了没有的所有数据
请参阅以下文档:
任何没有我们正在查询的子键的节点都将使用null值进行排序,这意味着它将在排序中排在第一位。有关数据排序方式的详细信息,请参阅
要限制检索的数据量,请确保
ref.orderBy(“newField”).endAt(“\t”)
。这里的\t
是制表符,它只是ASCII图表早期的一个字符。通过在那里结束结果,您减少了返回的项目数。@FrankvanPuffelen,因此在firebase术语中使用.endAt(“\t”)
与以下内容相同:.equalTo(null或“\t”)
?我刚刚阅读了@Dennis answer提到的文章,最佳方法是添加endAt(false)
,这将只返回具有该字段值的节点,如NULL或FALSE,“Frank”的答案确实认为我的字段是一个字符串,相反,它是一个整数,限制检索的数据量,请确保代码< > R..OrdBy(“NeWfield”)。endAt(“\t”)。这里的\t
是制表符,它只是ASCII图表早期的一个字符。通过在那里结束结果,您减少了返回的项目数。@FrankvanPuffelen,因此在firebase术语中使用.endAt(“\t”)
与以下内容相同:.equalTo(null或“\t”)
?我刚刚阅读了@Dennis answer提到的文章,最佳方法是添加endAt(false)
,这将只返回具有该字段的值的节点,如NULL或FALSE,“Frank”的答案确实认为我的字段是一个字符串,而不是整数。