【问题标题】:Firebase RTDB: updating/merging new with old data from CLIFirebase RTDB:使用 CLI 中的旧数据更新/合并新数据
【发布时间】:2018-12-02 10:30:09
【问题描述】:

我有多个(大)JSON 文件要添加到 Firebase 实时数据库 (RTBD)。我正在使用 Geofire,所以所有子节点都需要在同一个父节点下。我正在存储静态地理数据,但我想定期刷新它。如果我不能分段刷新它,那么始终保证我正在更新的一个大 JSON 始终是 100% 完成就会有问题。

我想要的数据结构是这样的:

{"parent" : {"child_a" : 1, "child_b" : 2}

我的第一个 JSON 是这样的

$ cat 1.json
{"parent": {"child_a" : 1 }}

我的第二个就是这样

$ cat 2.json
{"parent": {"child_b" : 2 }}

我已经尝试将firebase-import--merge 标志一起使用:

$ firebase-import --database_url https://my_db.firebaseio.com/ --path / --json 2.json --service_account auth.json --merge

还尝试使用带有更新标志的firebase-tools

$ firebase database:update / 2.json

但两者都从数据库中删除 1.json 的内容,并给我这个

{"parent": {"child_b" : 2 }}

如何将多个 JSON 文件合并到同一个节点,而不覆盖之前的 JSON 内容?


部分答案:使用setmerge,显示here 用于Firestore。但是如何使用 CLI 和 Firebase 做到这一点?

【问题讨论】:

  • 您的两个文件都有一个公共节点parent,并且在第二次调用后更新不会合并两个子节点。每次都会完全覆盖共同的父母。我认为您要么必须重写您的 JSON 以仅包含要添加的子级而无需公共父级,然后在命令行上使用父级名称。或者在脚本中编写一些代码来执行此操作。
  • @DougStevenson 啊,现在我明白了。因此,取出单个 JSON 中的 geofire 键,然后将其添加回命令行 /geofire/。我得测试一下……

标签: firebase firebase-realtime-database geofire firebase-cli


【解决方案1】:

根据Doug的评论,

通过从我的 JSON 中删除顶级父节点,然后将其添加到 firebase-import 命令,我可以通过多个步骤将单个键添加到 parent 节点,而不会覆盖现有的子节点。

因此,从问题中的示例来看,JSON 文件中没有 parent 节点,并且 import 语句的 --path 标志中也没有 parent 节点

$ cat 1.json
{"child_a" : 1 }

$ firebase-import --database_url https://my_db.firebaseio.com/ --path /parent --json 1.json --service_account auth.json --merge

$ cat 2.json
{"child_b" : 2 }

$ firebase-import --database_url https://my_db.firebaseio.com/ --path /parent --json 2.json --service_account auth.json --merge

以我需要的方式为我提供数据:

{"parent" : {"child_a" : 1, "child_b" : 2}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多