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

How to add a filter to a datastore query based on condition

我正在从 POST 接收参数,如果这些参数存在,我想更改数据存储区查询。这是一个示例,其中我们可能会或可能不会从 post 消息中收到 "title" 变量。如果它确实存在,我想将它作为过滤器包含在查询中:

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

有什么建议吗?

如果参数存在,可选择对查询调用另一个 Query.Filter() 方法。请务必存储 return 值,因为它可能是不同的派生查询。
原因是所有查询 builder/modifier 方法 return 一个派生查询,您可以使用它来链接多个操作。不过,您不必一步完成所有操作,您可以存储中间结果查询并从那里继续 "work"(例如添加新过滤器)。请记住始终存储 return 值,并且您必须使用最后一种方法编辑的 Query return。

解法(候选):

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

注:

你没有提到它,但我认为 titlestringstring 类型的变量不能有 nil 值。 string 的零值是空字符串 "" 所以用它来 compare/test:

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