【问题标题】:Check if a key exists without getting all node data在不获取所有节点数据的情况下检查密钥是否存在
【发布时间】:2021-11-27 08:21:39
【问题描述】:

我正在使用带有节点的 Firebase 实时数据库,我发现检查密钥是否存在的唯一方法是返回所有数据

{
  "salas" : {
    "sala01" : {
      "activa" : true,
      "fechaComienzo" : "2021-10-16 07:09:00Z",
      "fechaCreacion" : "2021-10-16 07:09:24Z",
      "nombre" : "test",
      "masInfo": {
        ...
      }
    },
    "sala02" : {
      "activa" : true,
      "fechaComienzo" : "2021-10-16 07:09:00Z",
      "fechaCreacion" : "2021-10-16 07:09:24Z",
      "nombre" : "test",
      "masInfo": {
        ...
      }
    }
  }
}
async function checkExists(_ref, key) {
    const q = query(_ref, ...[orderByKey(), equalTo(key)])
    const datos = await get(q);
    console.log('@info', q, datos);
    return datos.exists();
}

const _ref = ref(getDatabase())
checkExists(_ref, 'sala01')

通过上面的例子,如果我想知道sala01 是否存在,它会给我带来每个节点及其后代。

我想知道是否有任何其他方法可以简单地检查 sala01 是否存在而不给我带来整个节点,或者是否有一些技巧可以带来一个深度就像我在 REST API 文档中看到的那样,@ 987654321@

【问题讨论】:

  • 有人向我解释为什么他们没有任何解释就给我否定。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

这种查询比需要的更复杂:

const q = query(_ref, ...[orderByKey(), equalTo(key)])

如果您已经知道某个节点的键,则无需使用查询,而是可以直接访问该键。

async function checkExists(_ref, key) {
    const ref = child(_ref, key)
    const datos = await get(ref);
    return datos.exists();
}

这不会读取整个/_ref 节点,但 读取整个/_ref/$key 节点。如果不读取该路径,就无法测试该路径是否存在。

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多