Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.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
Android firebase检索具有空字段的节点_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 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

我更新了我项目的域类,与以前的版本发生了一些不兼容

我正在摆脱他们中的大多数,但有一种情况是有问题的

我需要从一个特定的分支中查找所有firebase节点,其指定字段==null

让我解释一下背景: 我在我的域类中添加了一些新字段以存储在firebase中。。。所以之前存储的所有数据都将具有这些字段的
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”的答案确实认为我的字段是一个字符串,而不是整数。