[英]How to add a filter to a datastore query based on condition
我正在從POST接收參數,並且基於這些參數是否存在,我想更改數據存儲區查詢。 這是一個示例,其中我們可能會或可能不會從發布消息中收到“ title”變量。 如果確實存在,我想將其作為過濾器包含在查詢中:
q := datastore.NewQuery("book").
Filter("author =", "DB").
if title != nil {Filter("title =",title).}
Order("author")
有什么建議么?
如果該參數存在,則可以選擇在查詢上調用另一個Query.Filter()
方法。 只要確保您存儲了返回值即可,因為它可能是一個不同的派生查詢。
原因是所有查詢構建器/修飾符方法都返回派生查詢,您可以使用該查詢鏈接多個操作。 但是,您不必一do而就,可以存儲中間結果查詢並從那里繼續執行“工作”(例如,添加新的過濾器)。 只要記住始終存儲返回值,就必須使用最后一個方法返回的Query
。
解決方案(候選人):
q := datastore.NewQuery("book").Filter("author =", "DB")
if title != nil {
q = q.Filter("title =", title)
}
q = q.Order("author")
注意:
您沒有提到它,但我認為title
是一個string
。 string
類型的變量不能具有nil
值。 string
的零值是空字符串""
因此可以使用它進行比較/測試:
q := datastore.NewQuery("book").Filter("author =", "DB")
if title != "" {
q = q.Filter("title =", title)
}
q = q.Order("author")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.