猿问

如何根据条件向数据存储查询添加过滤器

我正在从 POST 接收参数,并根据这些参数是否存在我想更改数据存储查询。这是一个示例,我们可能会或可能不会从帖子消息中收到“标题”变量。如果它确实存在,我想将它作为过滤器包含在查询中:


q := datastore.NewQuery("book").

    Filter("author =", "DB").

    if title != nil {Filter("title =",title).}

    Order("author")

有什么建议?


倚天杖
浏览 176回答 1
1回答

暮色呼如

Query.Filter()如果参数存在,则可以选择在查询上调用另一个方法。请确保您存储返回值,因为它可能是一个不同的派生查询。原因是所有查询构建器/修饰符方法都返回一个派生查询,您可以使用它来链接多个操作。不过,您不必一步完成所有操作,您可以存储中间结果查询并从那里继续“工作”(例如添加新过滤器)。请记住始终存储返回值,并且必须使用Query最后一个方法返回的值。解决方案(候选人):q := datastore.NewQuery("book").Filter("author =", "DB")if title != nil {    q = q.Filter("title =", title)}q = q.Order("author")笔记:你没有提到它,但我认为title是一个string. 类型变量string不能有nil值。a 的零值string是空字符串,""因此使用它来比较/测试:q := datastore.NewQuery("book").Filter("author =", "DB")if title != "" {    q = q.Filter("title =", title)}q = q.Order("author")
随时随地看视频慕课网APP

相关分类

Go
我要回答