MongoDB教程
第九章 MongoDB查询构造器
## 查询字段 设置 find() 方法的第二个参数 - 语法: db.collection_name.find(query,{key1:1, key2:1, ...}) - 参数: query:可选参数,使用查询操作符指定的查询条件; key1、key2、...:为要查询或者隐藏的字段,当值为 1 时表示显示该字段,值为 0 时表示隐藏该字段。 - 例子 ```shell >db.collection_name.find({}, {_id:1}) > db.course.find({},{"title":1, _id:0}) ``` >如果仅需要设置第二个参数,而不需要设置第一个参数的话,则需要在第一个参数的位置添加一个空的花括号{}作为占位符. >注意:在执行 find() 方法时 _id 字段是始终显示的,如果您不希望显示此字段,就需要将其设置为 0。 ## Limit与Skip方法 - 语法: db.COLLECTION_NAME.find().limit(NUMBER) db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) - 例子: ```shell db.course.find({},{"title":1,_id:0}).limit(2) db.course.find({},{"title":1,_id:0}).skip(2) db.course.find({},{"title":1,_id:0}).skip(1).limit(2) ``` ##排序 >sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。 - 语法: db.COLLECTION_NAME.find().sort({KEY:1}) - 实例: ```shell db.course.find({}, {"title":1,_id:0}).sort({"title":-1}) db.course.find({}, {"title":1,_id:0}).sort({}) ``` ## 聚合查询 ####aggregate() 方法 >聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。 - 语法:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) - 聚合的表达式 | 表达式 | 描述 | 实例 | | ----- | ----- | ----- | | $sum | 计算总和 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) | | $avg | 计算平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) | | $min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) | | $max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) | | $push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) | | $addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) | | $first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) | | $last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) | - 实例 ```shell ##通过字段by_user字段对数据进行分组,并计算by_user字段相同值的总和 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) ``` ####管道 >在 UNIX 命令中,管道意味着可以将某些操作的输出结果作为下一个命令的参数,以此类推。MongoDB 中同样也支持管道,即 MongoDB 会在一个管道处理完毕后将结果传递给下一个管道处理,而且管道操作是可以重复的。 - 聚合框架中常用的几个管道操作 - **$project:**修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。 - **$match:**用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 - **$limit:**用来限制MongoDB聚合管道返回的文档数。 - **$skip:**在聚合管道中跳过指定数量的文档,并返回余下的文档。 - **$unwind:**将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 - **$group:**将集合中的文档分组,可用于统计结果。 - **$sort:**将输入文档排序后输出。 - **$geoNear:**输出接近某一地理位置的有序文档。 - 实例 ```shell 1、$project实例 #这样的话结果中就只还有_id,tilte和author三个字段了, db.article.aggregate( { $project : { title : 1 , author : 1 , }} ); 2.$match实例 ###$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。 db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] ); 3.$skip实例 db.article.aggregate({ $skip : 5 }); ```
顶部
收展
底部
[TOC]
目录
第一章 NoSQL和MongoDB简介
第二章 MongoDB安装
第三章 MongoDB概念
第四章 MongoDB数据类型
第五章 MongoDB连接数据库
第六章 MongoDB数据库增删查
第七章 MongoDB集合增删查
第八章 MongoDB文档增删查改
第九章 MongoDB查询构造器
第十章 MongoDB备份与恢复
第十一章 MongoDB复制(副本集)
第十一章 MongoDB分片
第十一章 MongoDB监控
第十二章 MongoDB索引
相关推荐
MongoDB进阶
PHP操作MongoDB
MongoDB用户及安全
MongoDB优化