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

时间:2015-02-07 13:20:53

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

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

q := datastore.NewQuery("book").
    Filter("author =", "DB").
    if title != nil {Filter("title =",title).}
    Order("author")

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果参数存在,可以选择在查询上调用另一个Query.Filter()方法。请确保存储返回值,因为它可能是一个不同的派生查询 原因是所有查询构建器/修饰符方法都返回一个派生查询,您可以使用该查询来链接多个操作。您不必一步完成所有操作,您可以存储中间结果查询并从那里继续“工作”(例如添加新过滤器)。请记住始终存储返回值,并且必须使用最后一个方法返回的Query

解决方案(候选人):

q := datastore.NewQuery("book").Filter("author =", "DB")
if title != nil {
    q = q.Filter("title =", title)
}
q = q.Order("author")

注意:

你没有提到它,但我认为titlestring。类型string的变量不能具有nil值。 string的零值是空字符串"",因此请使用它来比较/测试:

q := datastore.NewQuery("book").Filter("author =", "DB")
if title != "" {
    q = q.Filter("title =", title)
}
q = q.Order("author")