如何使用电子邮件地址查询appengine数据存储区

时间:2015-03-18 21:29:56

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

我正在尝试使用他们的电子邮件地址在appengine数据存储区中查找用户。我正在使用Go。

此代码找不到用户。

var users []entity.User
q := datastore.NewQuery("users").Filter("AccountEmail =", "email@address.com")
_, err := q.GetAll(c, &users)

如果我更改查询以使用“Id”属性查找用户,则可以正常工作。

var users []entity.User
q := datastore.NewQuery("users").Filter("Id", "185804764220139124118")
_, err := q.GetAll(c, &users)

我已确认“AccountEmail”的属性名称和值是否正确。 “AccountEmail”它也被编入索引。

是否需要使用电子邮件地址进行一些特殊格式化才能使查询生效?

1 个答案:

答案 0 :(得分:2)

要通过电子邮件(AccountEmail)查找用户,必须满足以下所有条件。请检查并确保每次“测试”通过:

  • 必须存在属性名称为AccountEmail的实体。不要忘记属性名称区分大小写。请注意,数据存储名称和struct字段名称可能不同,可以使用标记来更改它,例如

    AccountEmail string `datastore:"email"`

  • 必须为该属性编制索引。请注意,属性是否已编入索引可能因实体而异,因此您可能拥有一个实体,其中AccountEmail已编入索引,另一个实体未编入AccountEmail索引。

  • AccountEmail必须包含string类型。我认为这是微不足道的,是这样的。但请注意,可以使用与User类型不同的string类型保存属性,例如,当您在数据存储区查看器中列出实体时,电子邮件将显示为就像它一样将是一个电子邮件字符串,但显然它是不同的。

  • 要查找AccountEmail="email@address.com"的用户,保存的值必须完全为"email@address.com"。大写和小写字母不同!空格(和所有空格字符)很重要!请检查保存的值是否与此完全相同,因为在打印时您不会看到尾随空格,但它们会导致不匹配!此外,一些unicode字符具有相同的视觉外观(它们看起来相同),但它们的unicode代码点不一样,也会导致不匹配。