IBM Cloudant 操作程序
通过在名称字段中使用美元符号 ($
) 前缀来标识运算符。
选择器语法具有两种核心类型的运算符:
- 组合运算符
- 条件运算符
通常,组合运算符应用在最顶级的选择级别。 它们用于将条件组合到一个选择器中,或者创建条件组合。
每个显式运算符都具有以下格式:
{
"$operator": "argument"
}
没有显式运算符的选择器被视为具有隐式运算符。 精确隐式运算符由选择器表达式的结构确定。
隐式运算符
以下列表中显示了两个隐式运算符:
- “平等”
- “和”
在选择器中,包含 JSON 值但其中没有运算符的任何字段都被视为等同性条件。 隐式等同性检验也适用于字段和子字段。
不是条件运算符的自变量的任何 JSON 对象都是每个字段上的隐式 $and
运算符。
请参阅以下使用运算符来匹配任何文档的示例选择器,其中 year
字段的值大于 2010:
{
"selector": {
"year": {
"$gt": 2010
}
}
}
在以下示例中,匹配文档必须具有名为 director
的字段。
和 字段的值必须完全等于 Lars von Trier
。
请参阅隐式等式运算符的以下示例:
{
"director": "Lars von Trier"
}
您还可以使等式运算符显式,如以下示例中所示。
请参阅以下显式等式运算符示例:
{
"director": {
"$eq": "Lars von Trier"
}
}
在使用子字段的以下示例中,匹配文档中的字段 imdb
必须 还具有子字段 rating
。
和 子字段 必须 具有等于 8 的值。
请参阅以下应用于子字段测试的隐式运算符示例:
{
"imdb": {
"rating": 8
}
}
您可以将等式运算符设为显式。
请参阅以下显式等式运算符示例:
{
"selector": {
"imdb": {
"rating": { "$eq": 8 }
}
}
}
请参阅用于全文索引的 $eq
运算符的以下示例:
{
"selector": {
"year": {
"$eq": 2001
}
},
"sort": [
"title:string"
],
"fields": [
"title"
]
}
请参阅 $eq
操作程序的以下示例,该操作程序用于在字段 year
上建立索引的数据库:
{
"selector": {
"year": {
"$eq": 2001
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
在以下示例中,字段 director
必须存在并且包含值 Lars von Trier
和 字段 year
必须存在并且具有值 2003
。
请参阅以下隐式 $and
操作程序示例:
{
"director": "Lars von Trier",
"year": 2003
}
您可以将 $and
运算符和等式运算符都设置为显式。
请参阅以下使用显式 $and
和 $eq
运算符的示例:
{
"$and": [
{
"director": {
"$eq": "Lars von Trier"
}
},
{
"year": {
"$eq": 2003
}
}
]
}
显式运算符
必须显式声明除 $eq
(等于) 和 $and
(和) 运算符之外的所有运算符。
组合运算符
组合运算符用于组合选择器。 三个组合运算符 ($all
,$allMatch
和 $elemMatch
) 可帮助您使用 JSON 数组以及在大多数编程语言中找到的公共布尔运算符。
组合运算符采用单个自变量。 该参数是另一个选择器或选择器数组。
运算符 | 自变量 | 用途 |
---|---|---|
$all |
Array | 如果数组值包含自变量数组的所有元素,那么与该值匹配。 |
$allMatch |
选择器 | 匹配并返回包含数组字段的所有文档,其中所有元素都与所有指定的查询条件匹配。 |
$and |
Array | 如果数组中的所有选择器都匹配,那么匹配。 |
$elemMatch |
选择器 | 匹配并返回包含数组字段的所有文档,其中至少有一个元素与所有指定的查询条件匹配。 |
$nor |
Array | 如果数组中没有匹配的选择器,那么匹配。 |
$not |
选择器 | 如果选择器不匹配,那么匹配。 |
$or |
Array | 如果数组中的任何选择器匹配,那么匹配。 所有选择器都必须使用相同的索引。 |
组合运算符的示例
$all
操作程序
如果 $all
运算符包含自变量数组的 所有 元素,那么该运算符将与数组值匹配。
请参阅以下使用 $all
运算符的示例:
{
"selector": {
"genre": {
"$all": ["Comedy","Short"]
}
},
"fields": [
"title",
"genre"
],
"limit": 10
}
$allMatch
操作程序
$allMatch
运算符匹配并返回包含数组字段的所有文档,其中数组字段中的所有元素都与提供的查询条件匹配。
请参阅以下使用 $allMatch
运算符的示例:
{
"genre": {
"$allMatch": {
"$eq": "Horror"
}
}
}
$and
操作程序
如果数组中的所有选择器都匹配,那么 $and
运算符将匹配。
请参阅以下使用 $and
运算符的示例:
{
"selector": {
"$and": [
{
"year": {
"$in": [2014, 2015]
}
},
{
"genre": {
"$all": ["Comedy","Short"]
}
}
]
},
"fields": [
"year",
"_id",
"title"
],
"limit": 10
}
$elemMatch
操作程序
$elemMatch
运算符匹配并返回包含数组字段的所有文档,该数组字段中至少有一个元素与提供的查询条件相匹配。
请参阅以下使用 $elemMatch
运算符的示例:
{
"selector": {
"genre": {
"$elemMatch": {
"$eq": "Horror"
}
}
},
"fields": [
"title",
"genre"
],
"limit": 10
}
$nor
操作程序
如果选择器 不 匹配,那么 $nor
运算符匹配。
请参阅以下使用 $nor
运算符的示例:
{
"selector": {
"year": {
"$gte": 1900,
"$lte": 1910
},
"$nor": [
{ "year": 1901 },
{ "year": 1905 },
{ "year": 1907 }
]
},
"fields": [
"title",
"year"
]
}
$not
操作程序
如果选择器 未 解析为值 true
,那么 $not
运算符匹配。
请参阅以下使用 $not
运算符的示例:
{
"selector": {
"year": {
"$gte": 1900,
"$lte": 1903
},
"$not": {
"year": 1901
}
},
"fields": [
"title",
"year"
]
}
$or
操作程序
如果数组中的任何选择器匹配,那么 $or
运算符匹配。
请参阅以下使用 $or
运算符的示例:
{
"selector": {
"year": 1977,
"$or": [
{ "director": "George Lucas" },
{ "director": "Steven Spielberg" }
]
},
"fields": [
"title",
"director",
"year"
]
}
条件运算符
条件运算符特定于字段,用于评估存储在该字段中的值。 例如,当指定字段包含等于所提供参数的值时,
$eq
运算符将匹配。
支持大多数编程语言通用的基本等式和不等式运算符。 一些“元”条件运算符也可用。
某些条件运算符接受任何有效的 JSON 内容作为自变量。 其他条件运算符要求自变量采用特定 JSON 格式。
运算符类型 | 运算符 | 自变量 | 用途 |
---|---|---|---|
平等 (in) | $lt |
任何 JSON | 该字段小于自变量。 |
$lte |
任何 JSON | 字段小于或等于自变量。 | |
$eq |
任何 JSON | 该字段等于自变量。 | |
$ne |
任何 JSON | 字段不等于自变量。 | |
$gte |
任何 JSON | 字段大于或等于自变量。 | |
$gt |
任何 JSON | 字段大于自变量。 | |
对象 | $exists |
布尔值 | 检查该字段是否存在,无论其值是什么。 |
$type |
字符串 | 请检查文档字段的类型。 可接受的值为 null ,boolean ,number ,string ,array 和 object 。 |
|
Array | $in |
JSON 值的数组 | 提供的列表中必须存在文档字段。 |
$nin |
JSON 值的数组 | 提供的列表中不得存在文档字段。 | |
$size |
整数 | 与文档中数组字段的长度匹配的特殊条件。 非数组字段无法与此条件匹配。 | |
其他 | $mod |
[除数,余数] | 除数和余数都是正整数或负整数。 非整数值会导致 404 状态。 匹配表达式 (field % Divisor == Remainder ) 为 true 且仅当文档字段为整数时的文档。 |
$regex |
字符串 | 要与文档字段匹配的正则表达式模式。 仅当字段是字符串值并且与提供的正则表达式匹配时匹配。 |
正则表达式不适用于索引,因此它们不得用于过滤大型数据集。 但是,它们可用于限制 partial index <find/partial_indexes>
。
条件运算符的示例
$lt
操作程序
如果指定的字段内容小于自变量,那么 $lt
运算符匹配。
请参阅以下将 $lt
运算符与全文索引配合使用的示例:
{
"selector": {
"year": {
"$lt": 1900
}
},
"sort": [
"year:number",
"title:string"
],
"fields": [
"year",
"title"
]
}
请参阅以下示例,该示例将 $lt
操作程序与在字段 year
上建立索引的数据库配合使用:
{
"selector": {
"year": {
"$lt": 1900
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$lte
操作程序
如果指定的字段内容小于或等于自变量,那么 $lte
运算符匹配。
请参阅以下将 $lte
运算符与全文索引配合使用的示例:
{
"selector": {
"year": {
"$lte": 1900
}
},
"sort": [
"year:number",
"title:string"
],
"fields": [
"year",
"title"
]
}
请参阅以下示例,该示例将 $lte
操作程序与在字段 year
上建立索引的数据库配合使用:
{
"selector": {
"year": {
"$lte": 1900
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$eq
操作程序
如果指定的字段内容等于提供的参数,那么 $eq
运算符匹配。
请参阅以下将 $eq
运算符与全文索引配合使用的示例:
{
"selector": {
"year": {
"$eq": 2001
}
},
"sort": [
"title:string"
],
"fields": [
"title"
]
}
请参阅以下示例,该示例将 $eq
操作程序与在字段 year
上建立索引的数据库配合使用:
{
"selector": {
"year": {
"$eq": 2001
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$ne
操作程序
如果指定的字段内容不等于提供的参数,那么 $ne
运算符匹配。
当您使用类型为 json
的索引时,$ne
运算符不能是选择器中的基本 (最低级别) 元素。
请参阅以下将 $ne
运算符与全文索引配合使用的示例:
{
"selector": {
"year": {
"$ne": 1892
}
},
"fields": [
"year"
],
"sort": [
"year:number"
]
}
请参阅以下将 $ne
运算符与主索引配合使用的示例:
{
"selector": {
"year": {
"$ne": 1892
}
},
"fields": [
"year"
],
"limit": 10
}
$gte
操作程序
如果指定的字段内容大于或等于自变量,那么 $gte
运算符匹配。
请参阅以下将 $gte
运算符与全文索引配合使用的示例:
{
"selector": {
"year": {
"$gte": 2001
}
},
"sort": [
"year:number",
"title:string"
],
"fields": [
"year",
"title"
]
}
请参阅以下示例,该示例将 $gte
操作程序与在字段 year
上建立索引的数据库配合使用:
{
"selector": {
"year": {
"$gte": 2001
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$gt
操作程序
如果指定的字段内容大于自变量,那么 $gt
运算符匹配。
请参阅以下将 $gt
运算符与全文索引配合使用的示例:
{
"selector": {
"year": {
"$gt": 2001
}
},
"sort": [
"year:number",
"title:string"
],
"fields": [
"year",
"title"
]
}
请参阅以下示例,该示例将 $gt
操作程序与在字段 year
上建立索引的数据库配合使用:
{
"selector": {
"year": {
"$gt": 2001
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$exists
操作程序
如果该字段存在,那么 $exists
运算符将匹配,而无论其值是什么。
请参阅以下使用 $exists
运算符的示例:
{
"selector": {
"year": 2015,
"title": {
"$exists": true
}
},
"fields": [
"year",
"_id",
"title"
]
}
$type
操作程序
$type
运算符要求指定的文档字段的类型正确。
请参阅以下使用 $type
运算符的示例:
{
"selector": {
"year": {
"$type": "number"
}
},
"fields": [
"year",
"_id",
"title"
]
}
$in
操作程序
$in
运算符要求文档字段 必须 存在于提供的列表中。
请参阅以下使用 $in
运算符的示例:
{
"selector": {
"year": {
"$in": [2010, 2015]
}
},
"fields": [
"year",
"_id",
"title"
],
"limit": 10
}
$nin
操作程序
$nin
运算符要求文档字段 不 存在于提供的列表中。
请参阅以下使用 $nin
运算符的示例:
{
"selector": {
"year": {
"$nin": [2010, 2015]
}
},
"fields": [
"year",
"_id",
"title"
],
"limit": 10
}
$size
操作程序
$size
运算符与文档中数组字段的长度相匹配。
请参阅以下使用 $size
运算符的示例:
{
"selector": {
"genre": {
"$size": 4
}
},
"fields": [
"title",
"genre"
],
"limit": 25
}
$mod
操作程序
$mod
运算符与表达式 (field % Divisor == Remainder
) 为 true 的文档匹配,并且仅当文档字段为整数时才匹配。 除数和余数必须是整数。 它们可以是正整数或负整数。 除数或余数为非整数的查询将返回 404 状态。
当您对除数或余数使用负整数值时,IBM® Cloudant® for IBM Cloud® $mod
运算符将使用 截断的除法。 Erlang rem
modulo 运算符和 C 中的 %
运算符的行为方式都类似。
请参阅以下使用 $mod
运算符的示例:
{
"selector": {
"year": {
"$mod": [100,0]
}
},
"fields": [
"title",
"year"
],
"limit": 50
}
$regex
操作程序
当字段为字符串值 且 与提供的正则表达式匹配时,$regex
运算符将匹配。
请参阅以下使用 $regex
运算符的示例:
{
"selector": {
"cast": {
"$elemMatch": {
"$regex": "^Robert"
}
}
},
"fields": [
"title",
"cast"
],
"limit": 10
}