Firestore将模式结构导出到JSON

rvpgvaaj  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(103)

我一直在网上找,我不确定,是否可以将Firestore模式结构导出为JSON?
类似于创建DDL的东西,其中包含创建DB表的指令。
我只需要模式而不是数据。

z31licg0

z31licg01#

正如评论中提到的,Firestore并没有真正遵循一个模式。
但我们仍然可以尝试理解数据的结构。
我是这么做的

第一步:导出数据。

在Firebase控制台上,进入-〉项目设置-〉服务帐户-〉生成新私钥-〉保存为exportedDB.json运行npx -p node-firestore-import-export firestore-export -a exportedDB.json -b original.json

第二步:删除不必要的信息,使文件更小。

下面是一个脚本,我用它将我的文件从7 MB缩减到10 KB,同时仍然保持结构不变。本质上,它只是删除兄弟文档并截断长字符串:

import json

def truncate_strings(json_obj):
    if isinstance(json_obj, dict):
        # check if object has more than one key that is alphanumeric and 20 characters long
        long_keys = [k for k in json_obj.keys() if isinstance(k, str) and k.isalnum() and len(k) == 20]
        if len(long_keys) > 1:
            # drop all keys except the first one
            first_key = long_keys[0]
            return {first_key: truncate_strings(json_obj[first_key])}
        else:
            # truncate all keys and values recursively
            return {k[:30]: truncate_strings(v) for k, v in json_obj.items()}
    elif isinstance(json_obj, list):
        if len(json_obj) > 5:
            truncated_list = [truncate_strings(elem) for elem in json_obj[:5]]
        else:
            truncated_list = [truncate_strings(elem) for elem in json_obj]
        return truncated_list
    elif isinstance(json_obj, str) and len(json_obj) > 30:
        return json_obj[:30]
    else:
        return json_obj

# Read in the original JSON file
with open('original.json', 'r') as f:
    original_json = json.load(f)

# Truncate any strings longer than 30 characters, drop array elements beyond the first 5,
# and drop object keys beyond the first one if there are multiple long keys
truncated_json = truncate_strings(original_json)

# Write the truncated JSON to a new file
with open('truncated.json', 'w') as f:
    json.dump(truncated_json, f)

第三步:让你喜欢的LLM,比如Chat-GPT,帮你推断schema:

请从这个json推断数据库模式:[粘贴截断文件的内容]

相关问题