2017-10-17 60 views
3

希望这里有一个相对简单的问题,使用Firestore查询在Firestore中创建按时间顺序的查询,可能是Bug?

我试图创建一个新闻源,从最旧的内容中排序最新的内容。这部分非常简单,我使用:

var first = db.collection("feeds/0/active").orderBy("timestamp", "desc").limit(3); 

其中检索新闻提要中的3个最新条目。那么我的想法是在下一个查询中,拉下Feed中的下3个项目。因此,如果我们按年龄进行分类,则按照新产品的数量计算4,5,6。

要做到这一点,我抢在查询一个的最后一个项目,并在查询2使用节点的时间戳我开始在值:

var first = db.collection("feeds/0/active").orderBy("timestamp", "desc").limit(3); 

     first.get().then(function (documentSnapshots) { 
     // Get the last visible document 
     var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length-1]; 


     var next = db.collection("feeds/0/active").orderBy("timestamp", "desc").startAt(lastVisible.data().timestamp).limit(3); 
     next.get().then(function(docSn){ 
     console.log("SECOND QUERY!") 
     docSn.forEach(function(doc) { 
      console.log(doc.data().message) 
     }) 
     }) 

这个代码的结果返回相同的第二查询返回,节点1,2,3,尽管试图告诉第二个查询在节点3开始

我也试过在一个JavaScript对象传递,而不是:

var datevalue = Date.parse(lastVisible.data().timestamp)  
    var next = db.collection("feeds/0/active").orderBy("timestamp", "desc").startAt(datevalue).limit(3); 

其中也unfortun没有工作。 我也尝试过传递整个快照项目,并得到错误 “来自JS的Malforormed调用:字段大小不同 [[9,38,38,38],[0,0,1,0], 等等。”

不是真的线索从哪里开始的这个,因为我已经通过文档和任何实例读取和我能找到的,似乎无法推测出来。我能想到实现这个唯一的另一种方法是使用云功能进行编号在创建每个节点..但是,感觉哈克

任何帮助将是巨大的!由于

+0

任何想法的人? – joe

回答

0

你检查整个列表返回?或者,只是第一个节点?

如果您使用startAt,则第二个列表中的第一个节点将是第一个列表中的最后一个节点(docs)。我建议使用startAfterdocs)。

例子:

var db = firebase.firestore() 
    var query = db.collection('feeds/0/active').orderBy('timestamp', 'desc').limit(3) 
    query.get().then((firstSnapshot) => { 
     var first3 = snapshot.docs 
     query.startAfter(first3[2]).get().then((nextSnapshot) => { 
     var next3 = snapshot.docs 
     }) 
    }) 
相关问题