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

标签 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"也被索引了。

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

最佳答案

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

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

    AccountEmail 字符串`datastore:"email"`

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

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

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

关于google-app-engine - 如何使用电子邮件地址查询 Appengine 数据存储区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29133079/

相关文章:

google-app-engine - 通过缓存控制的 Google App Engine 边缘缓存?

python - Google App Engine 数据存储分面搜索

google-app-engine - golang中不同实体种类的无情祖先查询

azure - 如何在golang中实现authorization_code授权流程以登录Azure AD

Python NDB : Property validation in queries?

python - Google App Engine SSL 版本 2.7.11 库不受/支持

python - GAE Search API 现在支持部分搜索

java - GAE/J 异步数据存储 API : how to do the equivalent of a UNIX select?

docker - Go 模块拉取旧版本的包

go - 从配置文件中删除键值对?