一尘不染

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

go

我正在尝试使用他们的电子邮件地址在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”它也被索引。

为了使查询正常工作,是否需要使用电子邮件地址进行某些特殊格式设置?


阅读 295

收藏
2020-07-02

共1个答案

一尘不染

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

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

AccountEmail stringdatastore:”email”``

  • 该属性必须被索引。请注意,是否对属性建立索引可能会因实体而异,因此您可能有一个实体在其中建立了AccountEmail索引,而另一个实体未在其中建立AccountEmail索引。

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

  • 要使用查找用户AccountEmail="email@address.com",保存的值必须"email@address.com"准确。小写和大写字母不同!空格(和所有空格字符)很重要!请检查保存的值是否正是此值,例如在打印时将看不到尾随空格,但它们会导致不匹配!另外,某些unicode字符具有相同的视觉外观(它们看起来相同),但是它们的unicode代码点不相同,并且还会导致不匹配。

2020-07-02