默认情况下,Datastore Client SDK中的匿名结构是否变平?

时间:2019-09-08 19:52:04

标签: google-cloud-datastore

似乎Structured Properties部分中提到的旧的Appengine数据存储库用于拉平嵌入的结构。

并且根据this announcement:默认情况下,除非明确展平,云数据存储客户端库默认将嵌入式结构存储为实体值。

但是,即使在Cloud Datastore客户端库中,匿名结构也似乎已被压平。

Old Datastore API docs中的“包字段”部分指示此行为:

  

这些规则在没有标签的情况下适用:匿名结构字段为   视为其内部导出字段是外部字段   结构(嵌入)。结果包括所有不包含的字段   在较高嵌入级别下被字段遮蔽。

     

如果不止一个   具有相同名称的字段存在于相同的嵌入级别,它是   排除在外。非struct类型的匿名字段被视为   以其类型作为名称。

看看package datastore API docs中的“结构化属性”,在上一个示例中,Inner3匿名结构具有一个显式标记要展平,但即使没有显式标记,其行为也似乎相同。

那么,是否可以假设拥有一个没有任何结构的匿名结构将始终是扁平化的?还是我们明确需要一个标签来扁平化?

1 个答案:

答案 0 :(得分:0)

不。如果要平整实体,应始终添加该标志。

让我们看一下Structured Properties的第一个示例:

type Inner struct {
    W int32
    X string
    Y bool
}

type Outer struct {
    I Inner
}

外部将具有一个属性,即内部,被编码为实体值。即使内部只有一个字段。

另一方面,如果您添加了flatten标志,如下所示:

type Outer struct {
    I Inner   `datastore:",flatten"`
}

外部外观如下:

type OuterEquivalent struct {
    IDotW      int32  `datastore:"I.W"`
    IDotX      string `datastore:"I.X"`
    IDotY      bool   `datastore:"I.Y"`     
}

因此,Datastore API不会自动平整您的实体。