【问题标题】:How do you persist and search for an entity which has multiple email addresses?您如何坚持并搜索具有多个电子邮件地址的实体?
【发布时间】:2018-12-10 05:35:45
【问题描述】:

以下代码失败,因为电子邮件字段实际上是一个列表,我想知道在应用引擎中处理此问题的正确/高效/惯用方式是什么?

type Person struct {
    Name    string
    Company string
    Email   []EmailAddress
}

type EmailAddress {
    Type  string // home, office, etc...
    Email string
}

var items []Person
q := datastore.NewQuery("Person").Filter("Company =", company).Filter("Email = ", email).Limit(1)
_, err := a.client.GetAll(a.ctx, q, &items)

它失败并显示以下消息,我认为这是由于电子邮件字段是一个“集合”的事实:

datastore: bad query filter value type: invalid Value type func() string

我是否必须做一些事情,比如拆分电子邮件地址字段,即:

type Person struct {
    Name         string
    Company      string
    EmailType    []string // home, office
    EmailAddress []string // bob@work, bob@home
}

【问题讨论】:

    标签: google-app-engine google-cloud-platform google-cloud-datastore


    【解决方案1】:

    您可能需要将电子邮件作为实体Structured Property Email 的属性引用,而不是作为Person 实体本身的属性。

    我看到 Go 支持加载/保存此类属性(请参阅 Nested structs on GAE datastore using Go),并支持以 Python 文档中指示的相同方式进行查询过滤:

    .Filter("Email.Email = ", email)
    

    【讨论】:

    • 这样就解决了问题。您对文档的看法是正确的,它似乎不在 golang 文档中,但我们可以从 python 文档中推断出来。
    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2018-08-21
    • 1970-01-01
    • 2015-01-23
    • 2020-12-04
    相关资源
    最近更新 更多