通常
"IN",数据存储区不支持过滤器。
Query.Filter()清单文档列出了允许的运算符:
">", "<", ">=", "<=", or "="
您可以为要作为过滤依据的数组中的每个元素执行一个 单独的
查询。同样,如果元素在连续范围内,则可以
IN用
id>=min和代替
id<=max。例如:
ids := []int64{1,2,3,4}q := datastore.NewQuery("Category").Filter("Id>=", 1).Filter("Id<=", 4)还要注意,虽然
IN通常不支持,但是如果属性是实体键本身,则可以使用
datastore.GetMulti()函数获取由其键数组指定的实体列表:
func GetMulti(c appengine.Context, key []*Key, dst interface{}) error注意:
第二次尝试返回所有实体,因为您调用
Filter()了查询,但是没有存储返回值,因此最终执行的查询将根本没有任何过滤器。
Query.Filter()返回包含您刚刚指定的过滤器的派生查询,您必须使用返回的
Query进行中查询。所以应该是:
q = q.Filter("Id=", id)但是,即使这样也不起作用:如果指定了多个过滤器,它们将处于逻辑AND连接,因此很可能会给您0结果,因为我怀疑在
Id列表和包含您所有ID的类别中都不会存在想要过滤。



