IBM Cloud Docs
IBM Cloudant 操作程序

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 字符串 请检查文档字段的类型。 可接受的值为 nullbooleannumberstringarrayobject
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
}