MongoDB查询以及投影操作符的实践

参考文章: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个元素。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>