where过滤器指定了匹配的where条件,类似于SQL的where。
REST API
下面的代码使用等于条件
filter[where][_property_] = _value_
filter[where][_property_][_op_] = _value_
可以在REST query中使用stringified JSON format。
Node API
Warning:
Methods of models in the AngularJS client have a different signature than those of the Node API. For more information, see AngularJS SDK API.
等于条件
{
where: {
_property_: _value_
}
}
{
where: {
_property_: {
_op_: _value_
}
}
}
```Where:
* _property_ 是属性的名字
* _value_ 是属性的值
* _op_ 是下面的[operators](6095118.html)
### Examples
`/api/cars?filter[where][carClass]=fullsize`
等于:
`Cars.find({ where: {carClass:'fullsize'} });`
更多例子见[Examples](6095118.html)。
**AND and OR operators**
使用AND和OR组合条件。
**REST**
`[where][<and|or>][0]condition1&[where][<and|or>]_condition2__..._`**Node API**`{where: {<and|or>: [_condition1_, _condition2_, ...]}}`Where _condition1_ and _condition2_ are a filter conditions.
### 操作符
下面的例子列出了where过滤器的所有操作符。
<table>
<tbody>
<tr>
<th>Operator</th>
<th>Description</th>
</tr>
<tr>
<td>and</td>
<td>并</td>
</tr>
<tr>
<td>or</td>
<td>或者</td>
</tr>
<tr>
<td>gt, gte</td>
<td>
<p>大于(gt = greater than); 大于或等于(gte = greater than equal)。这个只对数字和日期有效。</p>
</td>
</tr>
<tr>
<td>lt, lte</td>
<td>小于(lt = less than);小于或等于(lte = less than equal)。这个只对数字和日期有效。</td>
</tr>
<tr>
<td>between</td>
<td>
<p>当值在指定的两个值之间为真:大于或等于第一个值,并小于或等于第二个值。</p>
</td>
</tr>
<tr>
<td>inq, nin</td>
<td>In / not in一个数组里面。</td>
</tr>
<tr>
<td>near</td>
<td>地理位置,返回最近的点。使用limit返回最近的n个点。</td>
</tr>
<tr>
<td>neq</td>
<td>不等于 (!=)</td>
</tr>
<tr>
<td>like, nlike</td>
<td>
<p>LIKE / NOT LIKE 一个正则表达式。正则表达式的格式依赖于后端的data source。</p>
</td>
</tr>
</tbody>
</table>
### 例子
#### 等于
返回名字为M1911的武器:
`/weapons?filter[where][name]=M1911`
#### 大于和小于
ONE_MONTH = 30 * 24 * 60 * 60 * 1000; // Month in milliseconds transaction.find({ where: { userId: user.id, time: {gt: Date.now() - ONE_MONTH} } }
下面的例子返回所有data大于指定值的所有员工:
`/employees?filter[where][date][gt]=2014-04-01T18:30:00.000Z`
等于:
```js
Employees.find({
where: {
date: {
gt: Date('2014-04-01T18:30:00.000Z')
}
}
});
返回3个射程大于900米的武器:
/weapons?filter[where][effectiveRange][gt]=900&filter[limit]=3
返回声音小于10的武器:
/weapons?filter[where][audibleRange][lt]=10
and / or
返回标题为My Post并且内容为Hello的帖子。
Post.find({where: {and: [{title: 'My Post'}, {content: 'Hello'}]}},
function (err, posts) {
...
});
等于:
?filter[where][and][0][title]=My%20Post&filter[where][and][1][content]=Hello
使用or查找所有标题等于My Post或者内容等于Hello的帖子
Post.find({where: {or: [{title: 'My Post'}, {content: 'Hello'}]}},
function (err, posts) {
...
});
下面的例子更复杂一些
(field1= foo and field2=bar) or field1=morefoo
:
{
"or": {
"and": [{
"field1": "foo"
}, {
"field2": "bar"
}],
"field1": "morefoo"
}
}
between
between操作符:
filter[where][price][between][0]=0&filter[where][price][between][1]=7
Node API:
Shirts.find({where: {size: {between: [0,7]}}}, function (err, posts) { ... } )
near
下面的例子使用near操作符返回3个离指定坐标最近的位置:
/locations?filter[where][geo][near]=153.536,-28.1&filter[limit]=3
like and nlike
like和nlike(not like)操作符类似于SQL里面的like,使用正则表达式进行匹配。正则表达式的格式依赖于后端的data source。
例子:
Post.find({where: {title: {like: 'M.+st'}}}, function (err, posts) { ... });
nlike的例子:
Post.find({where: {title: {nlike: 'M.+XY'}}}, function (err, posts) {
当使用内存数据库时:
User.find({where: {name: {like: '%St%'}}}, function (err, posts) { ... });
User.find({where: {name: {nlike: 'M%XY'}}}, function (err, posts) { ... });
inq
inq检查指定属性的值是否在数组里面。
{ where: { _property_: { inq: [_val1_, _val2_, ...] } } }
- property 是属性的值
- val1, val2, 是数组的值
inq的例子:
Posts.find({where: {id: {inq: [123, 234]}}},
function (err, p){... });
REST:
/medias?filter[where][keywords][inq]=foo&filter[where][keywords][inq]=bar
或
?filter={"where": {"keywords": {"inq": ["foo", "bar"]}}}