Firebase 数据库 Rest API:Returns 当所有节点都包含相同的值时结果不正确,除了一个
Firebase Database Rest API: Returns incorrect results when all nodes contain the same value except one
我有一个 Json 数据,使用
按最高查看次数排序
OrderBy("Views").LimitToLast(10)
除一个元素外,所有元素都具有相同的 (Views) 值。
这是完整的 Json 数据,没有添加特定限制:
{
"-Mn7-ZxkUPO01dxifhtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01iddfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idsdfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idsdfhtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idxfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Views" : 50
},
"-Mn7-ZxkUPO01ifdshtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh21tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2dstpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2tpEdsn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2txpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhds2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhewtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhtdxpEn" : {
"Views" : 20
}
}
当我使用
OrderBy("Views").LimitToLast(10)
它将正确获取前 10 个元素,Last Id 将为
-Mn7-ZxkUPO01ifddhtpEn
是与其余数据不同的值
这里是响应结果:
现在假设当我从
lastId
-Mn7-ZxkUPO01ifddhtpEn
和
最后值
50
它会正确 return 剩余的数据,事实上它会 return 在前 10 个中获取的数据,并且当所有数据都具有相同的视图值时会出现此问题,除了只有一处不同。
{
"-Mn7-ZxkUPO01idxfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Views" : 50
},
"-Mn7-ZxkUPO01ifdshtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh21tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2dstpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2tpEdsn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2txpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhds2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhewtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhtdxpEn" : {
"Views" : 20
}
}
它应该 return :
{
"-Mn7-ZxkUPO01dxifhtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01iddfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idsdfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idsdfhtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idxfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Views" : 50
}
感谢您的帮助 :) 感谢您的工作
据我所知,当您按观看次数排序时,此节点是 JSON 中的最后一个节点:
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Text" : 6,
"Title" : "some title",
"Views" : 50
},
因此,当您执行此查询时:orderBy="Views"&limitToLast=10,您要求的是按 Views
计数排序的最后 10 个节点。
然后在下一个查询中使用 last 节点的键:orderBy="Views"&limitToLast=11&endAt=50,"-Mn7-ZxkUPO01ifddhtpEn", so now you're asking for the last 11 nodes ending at the last node already. That endAt
clause is superfluous as far as I can see, to this is the same as orderBy="Views"&limitToLast=11.
这里要记住的是,您是从数据集的末尾向后分页。所以要得到倒数第二页,需要知道最后一页first项的Views+key
我有一个 Json 数据,使用
按最高查看次数排序OrderBy("Views").LimitToLast(10)
除一个元素外,所有元素都具有相同的 (Views) 值。
这是完整的 Json 数据,没有添加特定限制:
{
"-Mn7-ZxkUPO01dxifhtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01iddfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idsdfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idsdfhtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idxfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Views" : 50
},
"-Mn7-ZxkUPO01ifdshtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh21tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2dstpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2tpEdsn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2txpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhds2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhewtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhtdxpEn" : {
"Views" : 20
}
}
当我使用
OrderBy("Views").LimitToLast(10)
它将正确获取前 10 个元素,Last Id 将为
-Mn7-ZxkUPO01ifddhtpEn
是与其余数据不同的值
这里是响应结果:
现在假设当我从 lastId
-Mn7-ZxkUPO01ifddhtpEn
和
最后值
50
它会正确 return 剩余的数据,事实上它会 return 在前 10 个中获取的数据,并且当所有数据都具有相同的视图值时会出现此问题,除了只有一处不同。
{
"-Mn7-ZxkUPO01idxfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Views" : 50
},
"-Mn7-ZxkUPO01ifdshtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh21tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2dstpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2tpEdsn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifh2txpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhds2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhewtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifhtdxpEn" : {
"Views" : 20
}
}
它应该 return :
{
"-Mn7-ZxkUPO01dxifhtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01iddfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idsdfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idsdfhtpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01idxfh2tpEn" : {
"Views" : 20
},
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Views" : 50
}
感谢您的帮助 :) 感谢您的工作
据我所知,当您按观看次数排序时,此节点是 JSON 中的最后一个节点:
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Text" : 6,
"Title" : "some title",
"Views" : 50
},
因此,当您执行此查询时:orderBy="Views"&limitToLast=10,您要求的是按 Views
计数排序的最后 10 个节点。
然后在下一个查询中使用 last 节点的键:orderBy="Views"&limitToLast=11&endAt=50,"-Mn7-ZxkUPO01ifddhtpEn", so now you're asking for the last 11 nodes ending at the last node already. That endAt
clause is superfluous as far as I can see, to this is the same as orderBy="Views"&limitToLast=11.
这里要记住的是,您是从数据集的末尾向后分页。所以要得到倒数第二页,需要知道最后一页first项的Views+key