Couchdb 查询 Selector 选择器语法
组合字符列表:
"$and" - 数组参数
"$or" - 数组参数
"$not" - 单一参数
"$nor" - 数组参数
"$all" - 数组参数(数组值的特殊运算符)
"$elemMatch" - 单一参数(数组值的特殊运算符)
条件参数列表:
平等运算符
"$lt" - 任意 JSON
"$lte" - 任意 JSON
"$eq" - 任意 JSON
"$ne" - 任意 JSON
"$gte" - 任意 JSON
"$gt" - 任意 JSON
对象相关运算符
"$exists" - 布尔值,检查字段是否存在,无论其值如何
"$type" - 字符串,检查文档字段的类型
数组相关运算符
"$in" - JSON值数组,文档字段必须存在于提供的列表中
"$nin" - JSON值数组,文档字段不得存在于提供的列表中
"$size" - 整数,特殊条件,用于匹配文档中数组字段的长度。非数组字段无法匹配此条件。
其他相关运营商
"$mod" - [Divisor,Remainder],其中Divisor和Remainder都是正整数(即大于0)。匹配文档where(field%Divisor == Remainder)为true。对于任何非整数字段,这都是错误的
"$regex" - 字符串,与文档字段匹配的正则表达式模式。仅当字段为字符串值并与提供的匹配项匹配时才匹配
最简单的选择器
{"selector":{"name":"tom"}}
其中
{"name":"tom"}
匹配 name 为 tom 的文档(如果存在)。使用其他字段扩展此示例可能如下所示:
{"name": "tom", "location": "Boston"}
这将匹配一个 name 叫 tom 的文件和拥有 Boston 的 location 值。
如果选择器中的对象键有两个特殊的语法元素(句号或简称)字符表示文档中的子字段。例如,这是两个相同的例子:
{"location": {"city": "Omaha"}}
{"location.city": "Omaha"}
如果对象的键包含句号,则可以使用反斜杠进行转义,即
{"location\\.city": "Omaha"}
请注意,这里需要双反斜杠来编码实际的单反斜杠。
第二个重要的语法元素是使用美元符号($)前缀来表示运算符。例如:
{"age": {"$gt": 21}}
在这个例子中创建了布尔表达式 age > 21 。
大多数形式是隐式运算符
在大多数情况下,每个操作员必须具有该形式{"$operator": argument}。虽然选择器有两个隐式运算符。
首先,任何不是条件运算符参数的JSON对象都是 $and 每个字段的隐式运算符。例如,这两个例子