参考文章:http://www.tuicool.com/articles/F3mya2R
1、比较操作符号
比较查询操作符符则有两类,一类是大于($gt、$gte)、小于($lt、$lte)、等于($eq、$ne)这种2值比较,一类是是否与数组内元素匹配($in、$nin)。当数值型数据进行比较时,MongoDB会先转换再进行比较。
$gt:greater than $gte:greater than equal $lt:less than $lte:less than equal $eq:equal $ne:not equal $in:in $nin:not in
2. 逻辑操作符
逻辑查询操作符有4种,分别是:与($and)、或($or)、非($not)以及或非($nor)逻辑。$and、$or、$nor后接大括号来框住的所接受的条件。而$not的使用有点不同,需要在指定字段之后,可以匹配后接的子条件以及该字段不存在的情况。
3. 元素操作符
元素选择器中$exists就是来选择指定字段存在数值的文档,$type则是选择字段的数值类型为指定类型,BSON当中的数据类型都有相应的数字来表示,这种类型数字就是在这里使用了。
4. 数组操作符
这3种针对数据选择的操作器如字面意思理解就可以了。需要注意几点就是:$all相当于$and 的行为一样,也就是数组中的元素条件要同时满足所以条件,而$elemMatch则需要对象数组中满足$elemMatch条件的所有条件,并且只返回第一个匹配的数组元素,这里还可以联系依稀$in选择器,$in限定来选择条件为一组值来匹配数组,而$elemMatch匹配的是对象数组元素。
5. 投影操作符
投影(project)的功能可以与SQL中的select类比,满足此条件的文档只返回包含指定字段的结果集。位置$符来匹配查询条件的第一个文档,$一般伴随着其他条件来限定数组元素的获取。比如这个条件 { semester: 1, grades: { $gte: 85 } }, { "grades.$": 1 }
就是在满足前面两个条件下,只获取grades数组第一个匹配的元素。$elemMatch如上述的应用一样返回符合匹配的第一个元素。
$meta的意义比较有意思,它的格式定义为{ $meta: }, 里头的metaDataKeyword指定’textScore’为关键词。这里需要引入$text文本搜索(其格式为{ $text: { $search: , $language: } })来设置搜索文本的查询条件,引入来TextScore来评价文档与搜索关键词的关联性。当$meta指定’textScore’时,查询结果就是文本相关的分数。
$slcie就如同数组操作slice一样,只返回指定数量、范围的元素,如db.posts.find( {}, { comments: { $slice: [ -20, 10 ] } } ),就只返回从comments数组倒数20开始的前10个元素。