原创

数据存储复合过滤器 OR 查询

温馨提示:
本文最后更新于 2024年04月12日,已超过 48 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

我一直在尝试修改使用以下过滤器的现有查询:

CompositeFilter.and(
            eq("firstName", firstName),
            ge("lastName" lastName),
            lt("lastName", lastName.concat("\uf8ff")))

查询运行良好,但对于数据库中的某些用户,我们没有字段firstName和lastName,我们还有其他字段基本上包含相同的信息(标签和姓氏);

我想提出这个方法来搜索丢失数据的用户:

CompositeFilter.or(
        CompositeFilter.and(
            eq("firstName", firstName),
            ge("lastName", lastName),
            lt("lastName", lastName.concat("\uf8ff"))),
        CompositeFilter.and(
             eq("tag", firstName),
             ge("surname", lastName),
             lt("surname", lastName.concat("\uf8ff")))
)

现在我很惊讶,因为查询没有从数据存储中检索任何实体。是否支持这种 CompositeFilters?

现在,当我尝试在 GCP 上查询时使用 GQL 时,我看到以下查询运行搜索结果:

SELECT * FROM  `db` WHERE  (tag="Carlos" AND surname>="Palma" AND surname<"Palma" )

但是,当我对另一个未检索结果的查询执行“或”操作时,我没有得到任何结果:

SELECT * FROM  `db` WHERE  (tag="Carlos" AND surname>="Palma" AND surname<"Palma" ) OR 
(firstName="Carlos" AND lastName>="Palma" AND lastName<"Palma" )

对我来说,这很奇怪,为什么第一个查询得到了结果,而在执行时却没有得到结果? OR 不是应该添加结果吗?

正文到此结束
热门推荐
本文目录