查询选择器语法
IBM Cloudant 查询语言以描述相关文档的 JSON 对象表示。 在此结构中,您可以通过使用特殊命名的字段来应用条件逻辑、 你可以通过使用特殊命名的字段来应用条件逻辑。
IBM Cloudant 查询语言与 MongoDB 查询文档有一些相似之处,但这些相似之处源于目的的共同性,并不一定等同于功能或结果。
选择器基础知识
基本选择器语法要求您指定一个或多个字段、 以及这些字段所需的相应值。 下面的示例选择器匹配所有
director 字段包含 Lars von Trier 值的文档。
请参阅下面的简单选择器示例:
{
"selector": {
"director": "Lars von Trier"
}
}
如果在创建全文索引时指定了 "type":"text"、 可以使用 $text 运算符选择匹配的文档。 在下面的示例中、 检查全文索引,查找包含 Bond 这个词的任何文档。
请参阅下面的全文索引简单选择器示例:
{
"selector": {
"$text": "Bond"
}
}
您可以通过组合操作符来创建更复杂的选择器表达式。 然而、 对于 IBM Cloudant 查询索引类型 json、 您不能使用 $regex 等“组合”或“数组逻辑”运算符作为查询的基础。 只有相等运算符,如 $eq、
$gt,
$gte,
$lt, 和 $lte- 但不是 $ne- 可用作更复杂查询的基础。 有关创建复杂选择器表达式的更多信息,请参阅创建选择器表达式、 请参阅 创建选择器表达式。
带两个字段的选择器
在下面的示例中、 选择器匹配任何带有 name 字段的文档,该字段包含 Paul、
且 location 字段的值为 "Boston "的文档。
请看下面一个更复杂的选择器示例:
{
"selector": {
"name": "Paul",
"location": "Boston"
}
}
分领域
使用更复杂的选择器来指定嵌套对象字段的值、 或子字段的值。 例如 您可以使用标准 JSON 结构来指定字段和子字段。
请参阅下面的示例,了解 JSON 对象中的字段和子字段选择器:
{
"selector": {
"imdb": {
"rating": 8
}
}
}
缩写等同使用点符号将字段和子字段名称合并为一个名称。
请参阅下面使用点符号的字段和子字段选择器等价示例:
{
"selector": {
"imdb.rating": 8
}
}
构建更复杂的选择器表达式
一般来说 只要有一个运算符需要一个参数、 该参数本身就可以是另一个运算符,并带有自己的参数。 这种扩展可以实现更复杂的选择器表达式。
当使用 JSON 类型的索引时,组合或数组逻辑运算符(如 $regex )可能会导致全数据库扫描。 当您使用 JSON 类型的索引时,可能会导致全数据库扫描、 导致性能低下。 只有相等运算符,如 $eq、
$gt, $gte, $lt,和 $lte (但不包括 $ne ),启用索引查找。 为确保有效使用索引,请分析每个查询的 每个查询的 解释计划。
大多数选择器表达式的工作原理与操作符的工作原理完全相同。
$regex 操作符使用的匹配算法目前基于
Perl 兼容正则表达式(PCRE)库。 不过,并非 PCRE 库的所有内容都已实现。 此外,
$regex 操作员的某些部分超出了 PCRE 提供的范围。 有关实现的更多信息、 请参阅 Erlang 正则表达式信息。
使用 $text 运算符
$text 操作符基于带有标准分析器的 Lucene 搜索。 该运算符不区分大小写,可以匹配任何单词。 但是
$text 操作符不支持完整的 Lucene 语法、 如通配符、 模糊匹配 或邻近性检测。
更多信息,请参阅搜索文档、 请参阅 搜索文档。
$text 运算符适用于在文档中找到的所有字符串。 如果将该操作符放在字段名中,则无效。