【问题标题】:firebase Starting point was already setfirebase 起点已设置
【发布时间】:2019-12-13 02:23:09
【问题描述】:

我在 node.js 上使用 firebase 管理和实时数据库 数据长这样

当我想获取 batch = batch-7 的数据时,我在做

let batch = "batch-7";
let ref = admin.database().ref('qr/');
ref.orderByChild("batch").equalTo(batch).on('value', (snapshot) =>
    {
        res.json(Object.assign({}, snapshot.val()));
        ref.off();
    });

一切正常! 但现在我应该创建分页,即我应该根据页面接收 10 个元素的数据。 我使用此代码:

let page = req.query.page;// num page
let batch = req.params.batch;// batch name
let ref = admin.database().ref('qr/');
ref.orderByChild("batch").startAt(+page*10).limitToFirst(10).equalTo(batch)
.on('value', (snapshot) =>
    {
        res.json(Object.assign({}, snapshot.val()));
        ref.off();
    });

但我有错误:

Query.equalTo:起点已经设置(通过另一个调用 startAt 或 equalTo)

如何获取 N 数量的数据,从位置 M 开始,其中批次等于我的批次

【问题讨论】:

    标签: node.js firebase firebase-realtime-database


    【解决方案1】:

    您只能拨打一个startAt(和/或endAt equalTo。两者都调用是不可能的,也没有多大意义。

    您似乎对startAt 的工作方式存在普遍误解,因为您传递的是偏移量。 Firebase 查询不是基于偏移量的,而是纯粹根据值工作,通常也称为锚节点。

    所以当你想获取第二页的数据,并且你通过batch排序时,你需要为锚节点传入batch的值;您要退回的第一个项目。这个锚节点通常是上一页的最后一项,因为您还不知道下一页的第一项。对于这个锚节点,您需要知道您订购的商品的价值 (batch)并且通常还需要知道它的键(如果/当可能有多个节点具有相同的 @ 值时) 987654329@).

    这也意味着你通常会多请求一项,这就是锚节点。

    所以当你请求第一页时,你应该跟踪最后一个节点的key/batch

    var lastKey, lastValue;
    ref.orderByChild("batch").equalTo(batch).limitToFirst(10).on('value', (snapshot) => {
      snapshot.forEach((child) => {
        lastKey = child.key;
        lastValue = child.child('batch').value();
      })
    })
    

    然后当你需要第二页时,你可以这样查询:

    ref.orderByChild("batch").start(lastValue, lastKey).endAt(lastValue+"\uf8ff").limitToFirst(11).on('value', (snapshot) => {
      snapshot.forEach((child) => {
        lastKey = child.key;
        lastValue = child.child('batch').value();
      })
    })
    

    这里还有一个技巧:我使用startAt 而不是equalTo,这样我们就可以进行分页了。但是它随后使用endAt 来确保我们仍然以正确的项目结束,方法是使用最后一个已知的Unicode 字符作为最后一个返回的batch 值。

    我还强烈建议您查看以前的一些 questions on pagination with the Firebase Realtime Database

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      相关资源
      最近更新 更多