Javascript 按子级排序时使用startAt()分页
我试图检索一个记录列表,按每个记录中的一个字段排序,我希望能够检索页面中的数据 根据,reference.startAt()方法有一个可选的第二个参数,即:Javascript 按子级排序时使用startAt()分页,javascript,firebase,pagination,firebase-realtime-database,Javascript,Firebase,Pagination,Firebase Realtime Database,我试图检索一个记录列表,按每个记录中的一个字段排序,我希望能够检索页面中的数据 根据,reference.startAt()方法有一个可选的第二个参数,即: 要开始的子键。只有按子级、值或优先级排序时,才允许使用此参数。 首先,以下是数据: { "products" : { "-KlsqFgVWwUrA-j0VsZS" : { "name" : "Product 4", "price" : 666 }, "-Klst-cLSckuwAuNAJF
要开始的子键。只有按子级、值或优先级排序时,才允许使用此参数。
首先,以下是数据:
{
"products" : {
"-KlsqFgVWwUrA-j0VsZS" : {
"name" : "Product 4",
"price" : 666
},
"-Klst-cLSckuwAuNAJF8" : {
"name" : "Product 1",
"price" : 100
},
"-Klst7IINdt8YeMmauRz" : {
"name" : "Product 2",
"price" : 50
},
"-Klst9KfM2QWp8kXrOlR" : {
"name" : "Product 6",
"price" : 30
},
"-KlstB51ap1L2tcK8cL6" : {
"name" : "Product 5",
"price" : 99
},
"-KlstDR5cCayGH0XKtZ0" : {
"name" : "Product 3",
"price" : 500
}
}
}
这是能够检索第1页的代码(最低价商品+第二低价商品+第三低价商品):
(我正在使用Firebase JS SDK 4.1.1)
输出:
TJ:database tjwoon$ node test.js
-Klst9KfM2QWp8kXrOlR: {"name":"Product 6","price":30}
-Klst7IINdt8YeMmauRz: {"name":"Product 2","price":50}
-KlstB51ap1L2tcK8cL6: {"name":"Product 5","price":99}
TJ:数据库tjwoon$node test.js
-Klst9KfM2QWp8kXrOlR: {"name":"Product 6","price":30}
-Klst7IINdt8YeMmauRz: {"name":"Product 2","price":50}
-KlstB51ap1L2tcK8cL6: {"name":"Product 5","price":99}
第2页应该是第三低、第四低和第五低价格的产品,这意味着我的代码还需要一行:
firebase.database().ref('products')
.orderByChild('price')
.startAt(null, '-KlstB51ap1L2tcK8cL6')
.limitToFirst(3)
.on('child_added', function (snapshot) {
var key = snapshot.key;
var data = snapshot.val();
console.log(key + ': ' + JSON.stringify(data))
})
输出:
TJ:database tjwoon$ node test.js
-Klst9KfM2QWp8kXrOlR: {"name":"Product 6","price":30}
-Klst7IINdt8YeMmauRz: {"name":"Product 2","price":50}
-KlstB51ap1L2tcK8cL6: {"name":"Product 5","price":99}
问题是它再次返回第1页。如果文档正确,结果应从记录处开始,键为-KlstB51ap1L2tcK8cL6
我尝试为price字段添加.indexOn
规则,但结果仍然相同
如果我删除了orderByChild()
行,那么结果确实从给定的键开始,但排序当然不正确,而且它的行为与文档相反
我发现了其他描述相同问题的堆栈溢出帖子:
- (见下面的评论。我没有足够的声誉在这里添加链接)
startat
匹配的问题
还有其他人面临同样的问题吗?这个问题使得无法以分页方式检索已排序的列表…您就快到了
问题在于如何调用第二页的startAt
:
.startAt(null, '-KlstB51ap1L2tcK8cL6')
要获得正确的结果,您需要输入所谓锚定项的价格和密钥:
.startAt(99, '-KlstB51ap1L2tcK8cL6')
Firebase将找到所有价格为的物品,然后返回从键开始的物品-KlstB51ap1L2tcK8cL6'
你就快到了
问题在于如何调用第二页的startAt
:
.startAt(null, '-KlstB51ap1L2tcK8cL6')
要获得正确的结果,您需要输入所谓锚定项的价格和密钥:
.startAt(99, '-KlstB51ap1L2tcK8cL6')
使用该Firebase将查找所有具有价格的物品99
,然后返回从键开始的物品-KlstB51ap1L2tcK8cL6'
第二堆栈溢出问题:第二堆栈溢出问题:谢谢!看起来第一个参数是“main”startAt标准,第二个参数作为一种消歧值,以防多个子项具有相同的值。这太棒了,非常感谢!我想知道如何通过REST使用此功能。如果有人能帮忙,这就是我在“谢谢”上的要求!看起来第一个参数是“main”startAt标准,第二个参数作为一种消歧值,以防多个子项具有相同的值。这太棒了,非常感谢!我想知道如何通过REST使用此功能。如果有人能帮忙,这就是我在