【发布时间】:2014-11-06 00:20:34
【问题描述】:
您将如何针对 JSONStore 实现以下查询
在 SQL 格式中是
select * from table where (A or B) and (C or D)
我假设我们将使用advancedFind 操作和QueryParts 数组,但是在示例中我可以看到如何使用QueryParts 来形成和AND,但不知道如何形成@ 987654326@查询。
任何指导表示赞赏。
【问题讨论】:
您将如何针对 JSONStore 实现以下查询
在 SQL 格式中是
select * from table where (A or B) and (C or D)
我假设我们将使用advancedFind 操作和QueryParts 数组,但是在示例中我可以看到如何使用QueryParts 来形成和AND,但不知道如何形成@ 987654326@查询。
任何指导表示赞赏。
【问题讨论】:
使用您的示例 SQL 并为其赋予值,它将如下所示:
select * from people where (name = 'carlos' or name = 'mike') AND (rank = 'king' or rank = 'pawn')
等同于:
select * from people where (name = 'mike' AND rank = 'king') or (name = 'carlos' AND rank = 'pawn') or (name = 'carlos' AND rank = 'king') or (name = 'mike' and rank = 'pawn')
这可以用 JSONStore 伪代码表示如下:
var queryPart1 = WL.JSONStore.QueryPart()
.equal('name', 'mike') //and
.equal('rank', 'king');
//or
var queryPart2 = WL.JSONStore.QueryPart()
.equal('name', 'carlos') //and
.equal('rank', 'pawn');
//or
var queryPart3 = WL.JSONStore.QueryPart()
.equal('name', 'carlos') //and
.equal('rank', 'king');
//or
var queryPart4 = WL.JSONStore.QueryPart()
.equal('name', 'mike') //and
.equal('rank', 'pawn');
WL.JSONStore.get('people').advancedFind([queryPart1, queryPart2, queryPart3, queryPart4])
.then(...);
查询部分中的所有内容都必须匹配(即类似于and),并且只要一个查询部分匹配(即类似于or)就会返回结果。请记住使用顶级搜索字段。
有时需要进行这些相当复杂的搜索,但我通常会建议重新考虑离线体验。我写了here。
【讨论】: