Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 如何查询具有其祖先未知的密钥的实体?_Google App Engine_Go - Fatal编程技术网

Google app engine 如何查询具有其祖先未知的密钥的实体?

Google app engine 如何查询具有其祖先未知的密钥的实体?,google-app-engine,go,Google App Engine,Go,A是B type A struct {} type B struct {} 我如何搜索字符串ID为stringID的B,而不考虑其祖先?(B和祖先A甚至可能不存在) 祖先实体可能不存在,但其ID或名称必须已知。否则,您将无法为子实体创建唯一密钥。请注意,A的子级和B的子级可能具有相同的ID或名称 还请注意,您可以删除一个实体并创建一个新实体,但一旦创建实体,就不能更改其父实体。祖先实体可能不存在,但其ID或名称必须已知。否则,您将无法为子实体创建唯一密钥。请注意,A的子级和B的子级可能具有相同

A
B

type A struct {}
type B struct {}
我如何搜索字符串ID为
stringID
B
,而不考虑其祖先?(B和祖先A甚至可能不存在)


祖先实体可能不存在,但其ID或名称必须已知。否则,您将无法为子实体创建唯一密钥。请注意,A的子级和B的子级可能具有相同的ID或名称


还请注意,您可以删除一个实体并创建一个新实体,但一旦创建实体,就不能更改其父实体。

祖先实体可能不存在,但其ID或名称必须已知。否则,您将无法为子实体创建唯一密钥。请注意,A的子级和B的子级可能具有相同的ID或名称

还请注意,您可以删除一个实体并创建一个新实体,但不能在实体创建后更改其父实体。

您可以为
a
创建实体,而不实际创建
a
实体(该实体仅在调用
datastore.Put()
时创建)。然后,您可以使用该键创建
b
(或者仅使用其键,如果您愿意的话)

至于查询方面:您可以对B类型的所有实体执行a,然后对每个键检查键的stringID是否与所需的
stringID
匹配。您可以获得多个结果-对于具有不同祖先的实体-stringID仅对同一祖先(或根本没有祖先)是唯一的。

您可以对
a
执行操作,而无需实际创建
a
实体(仅在调用
datastore.Put()
时才创建实体)。然后,您可以使用该键创建
b
(或者仅使用其键,如果您愿意的话)


至于查询方面:您可以对B类型的所有实体执行a,然后对每个键检查键的stringID是否与所需的
stringID
匹配。您可以获得多个结果-对于具有不同祖先的实体-stringID仅对同一祖先(或根本没有祖先)是唯一的。

您可以简单地对父项传递
nil
:数据存储。NewKey(ctx,“B”,“stringID”,0,nil)@abhink:如果传递nil,此实体将没有父项。实体无法更改其父项。您只需传递父项的
nil
datastore.NewKey(ctx,“B”,“stringID”,0,nil)
@abhink:如果传递nil,此实体将没有父项。实体无法更改其父实体。我希望能够执行部分关键字名称搜索或类似的操作。根据我的设计,stringID是唯一的,所以这就是我测试B是否存在的方法。我想我只会对B做一个键引用,尽管我会失去很强的一致性。我希望能够进行部分键名搜索或类似的搜索。根据我的设计,stringID是唯一的,所以这就是我测试B是否存在的方法。我想我只会对B进行一个键引用,尽管我会失去很强的一致性。我确实可以对一个只使用键的查询进行访问。谢谢你的主意。从技术上讲,我可以为a创建密钥,但如果a->b组确实存在,我将忽略该组。密钥创建段落仅回答“a”可能不存在,那么我在这里做什么?”代码中的注释,我将其解释为问题的一部分:)我确实可以访问仅密钥查询。谢谢你的主意。从技术上讲,我可以为a创建密钥,但如果a->b组确实存在,我将忽略它。密钥创建段落只回答了“a可能不存在,那么我在这里做什么?”代码中的注释,我将其解释为问题的一部分:)
ctx := appengine.NewContext(r)
a := ??? // 'A' may not exist, so what do I do here?
k := datastore.NewKey(ctx, "B", "stringID", 0, a)
e := new(B)
if err := datastore.Get(ctx, k, e); err != nil {
    http.Error(w, err.Error(), 500)
    return
}