gpt4 book ai didi

谷歌云数据存储层次结构树过滤子与 Go

转载 作者:数据小太阳 更新时间:2023-10-29 03:20:18 24 4
gpt4 key购买 nike

我有一种轻微的感觉,我错过了明显的,但似乎无法弄清楚这一点。我正在将一个 API 从传统的 MySQL 数据模型迁移到 Cloud Datastore,并且在使用 Go Library 过滤子实体时递归构建层次结构树时遇到问题.

我的模型看起来像这样:

    type Country struct {
Key *datastore.Key `datastore:"__key__"`
Id int
Name string
Region []Region
}

type Region struct {
Key *datastore.Key `datastore:"__key__"`
Id int
Name string
State []State
}

type State struct {
Key *datastore.Key `datastore:"__key__"`
Id int
Name string
}

没有像上面的表示那样在数据存储中使用嵌套实体。在数据存储中,我有 3 个不同的实体存储每个实体及其各自的祖先 key :

Entity Country: Parent = nil
Entity Region: Parent = Country
Entity State: Parent = Region

我想查询给定的状态列表,并在结构中构建整个层次结构的正确表示。我可以实现这一点,首先检索满足我的标准的所有国家实体:

    var state []*State

query := datastore.NewQuery("State").Filter("Name=", params[i])

if _, err = client.GetAll(ctx, query, &state); err != nil {
return nil, err
}

然后遍历状态以查找每个状态所属的区域:

    var region Region

if err := client.Get(ctx, state[i].Key.Parent, &region); err != nil {
return nil, err
}

此解决方案的问题在于,返回的多个状态可能属于同一区域,如果我获得每个状态的父区域,我最终会得到一片区域,这些区域可能在它每个都有一个状态。

我知道我可以通过我的代码排序和检查是否已经添加了一个区域来解决这个问题,然后将状态附加到它上面。然而,这个解决方案似乎是解决这个问题的一种非常麻烦的方法,我想知道我是否有其他选择。

请注意,此模型只是真实模型的简化表示。真实模型在层次结构中有 9 个级别,用户可以搜索到最低级别,并且需要在最终的 JSON 中表示相应的树。

最佳答案

我不完全确定你在做什么。但是,听起来您应该在父项的 key 中对父项的名称进行编码。这样您就可以显示您需要的部分层次结构而无需获取父实体。例如。完整的子 key 可能类似于“(国家,美国),(地区,中西部),(州,密歇根)”。

如果这不起作用,我认为您应该遵循最初的想法,将要提取的父键放在一个集合中,然后一次提取所有父键。

关于谷歌云数据存储层次结构树过滤子与 Go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55086374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com