当由孩子排序时使用startAt()进行分页 [英] Pagination using startAt() when ordering by child

查看:202
本文介绍了当由孩子排序时使用startAt()进行分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图只检索记录列表,按每个记录中的一个字段排序,我希望能够检索页面中的数据。



根据 Firebase文档 reference.startAt()方法有一个可选的第二个参数,它是:

子钥匙开始。这个参数只允许按照子,值或者优先顺序排序。

首先,这里是数据:

  {
products:{
-KlsqFgVWwUrA-j0VsZS:{
name:产品4,
价格:666
},
-Klst-cLSckuwAuNAJF8:{
name:Product 1,
price :
$,
-Klst7IINdt8YeMmauRz:{
name:Product 2,
price:50
},
-Klst9KfM2QWp8kXrOlR:{
name:Product 6,
price:30
},
-KlstB51ap1L2tcK8cL6:{
名称:Product 5,
price:99
},
-KlstDR5cCayGH0XKtZ0:{
name:Product 3,
价格:500
}
}
}

这里是能够检索到的代码Page 1(最低价格商品+第二低价格+第三低价格):

(I使用Firebase JS SDK 4.1.1)

 'use strict'; 
var firebase = require('firebase');

firebase.initializeApp({
apiKey:your-api-key,
authDomain:your-firebase-domain,
databaseURL:https: //your-db.firebaseio.com,
projectId:your-project,
storageBucket:your-bucket.appspot.com,
messagingSenderId:your-sender- (b)

$ b $ firebase.database()。ref('products')
.orderByChild('price')
.limitToFirst(3)
.on('child_added',function(snapshot){
var key = snapshot.key;
var data = snapshot.val();
console.log(key +': '+ JSON.stringify(data))
})

输出:


$ b $ TJ:database tjwoon $ node test.js

  -Klst9KfM2QWp8kXrOlR:{name :Product 6,price:30} 
-Klst7IINdt8YeMmauRz:{name:Product 2,price:50}
-KlstB51ap1L2tcK8cL6:{name:Product 5,price:99}

第2页应该是第3低,第4低,第五低价产品cts,这意味着我的代码需要一个额外的行:

$ $ $ $ $ c $ 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))
})



输出:

$ $ $ $ $ $ $ $ $ $ $ $ $ TJWO $ $ test.js
-Klst9KfM2QWp8kXrOlR:{ name:Product 6,price:30}
-Klst7IINdt8YeMmauRz:{name:Product 2,price:50}
-KlstB51ap1L2tcK8cL6:{name产品5,价格:99}

问题在于它再次返回页1。如果文档是正确的,结果应该从 -KlstB51ap1L2tcK8cL6 记录开始。



一个 .indexOn 规则为价格字段,但结果保持相同。



如果我删除<$ c $ b> orderByChild()行,那么结果是从给定的键开始的,当然排序是不正确的,加上它的行为与文档相反...

我发现这些其他堆栈溢出帖子描述了同样的问题:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆