MongoDB学习三

MongoDB查询
基本语法

db.COLLECTION_NAME.find()

如果你需要以易读的方式读取数据可以使用pretty()

db.col.find().pretty()
操作格式范例RDBMS中的类似语句
等于{<key>:<value>}db.col.find({“name”:”mongoDB”})where name=’mongoDB’
小于{<key>:{$lt:<value>}}db.col.find({‘lieks’:{$lt:50}})where likes<50
小于或等于{<key>:{$lte:<value>}}db.col.find({‘lieks’:{$lt:50}})where likes<=50
大于{<key>:{$gt<value>}}db.col.find({‘lieks’:{$gt:50}})where likes>50
大于等于{<key>:{$gte<value>}}db.col.find({‘lieks’:{$gte:50}})where likes>=50
不等于{<key>:{$ne<value>}}db.col.find({‘lieks’:{$ne:50}})where likes!=50

MongoDB AND条件
MongoDB的find()方法可以传入多个键,每个键以逗号隔开
语法如下:

db.col.find({key1:value1, key2:value2})

MongoDB OR条件
or条件语句使用了关键字$or语法格式如下

db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
)

MongoDB OR和AND连用

db.col.find(
    {
        "likes": {$gt:50}, 
        $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]
    }
)

MongoDB $type操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
MongoDB中可使用的类型如下表所示:

类型数字备注
Double1
String2
Object3
Array4
Binary data5
Undefined6已废弃
Object id7
Boolean8
Date9
Null10
Regular Expression11
JaveScript13
Symbol14
JavaScript(with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255Query with -1
Max key127

使用:
若果想要获取”col”结合中title为string类型的数据,可以这样写

db.col.find({'title':{$type:2}})

MongoDB Limit()方法

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接收一个数字参数,该参数指定从MongoDB中读取的记录条数。
语法:

db.COLLECTION_NAME.find().limit(NUMBER)

如果没有指定limit()方法中的参数则默认显示全部。

MongoDB Skip()方法

Skip()方法用来跳过指定数量的数据
语法:

db.COLLECTION_NAME.skip(NUMBER)

默认参数为0

MongoDB sort()方法

在MongoDB中使用sort方法进行排序,该方法可以通过参数指定排序的字段,并使用1和-1来指定排序方式,1为升序排序,-1为降序排序
语法:

db.COLLECTION_NAME.find().sort({key:1})

MongoDB索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据的时候必须扫描集合中的每个文件并选出那些符合查询条件的查询。
索引是特殊的数据机构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的进行排序的一种结构。
创建索引的语法:

db.COLLECTION_NAME.ensureIndex({key:1})

例子:

db.col.ensureIndex({tittle:1,likes:-1})

你可以同时设置多个字段创建索引,1为升序创建索引,-1位降序创建索引
ensureIndex()还可以接受其他参数,具体参数可查询手册
例如:

db.col.ensureIndex({tittle:1,likes:-1},{background:true})

这样就可以使创建索引的工作在后台执行

MongoDB聚合

主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql中的count(*)
集合中的数据:

{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'w3cschool.cc',
   url: 'http://www.w3cschool.cc',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'w3cschool.cc',
   url: 'http://www.w3cschool.cc',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   _id: ObjectId(7df78ad8902e)
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
},

查询语句:

db.article.aggregate([
    {
        $group : {
            _id : "$by_user", 
            num_tutorial : {$sum : 1}
            }
    }
])

类似sql中的:select by_user,count(*) from article group by by_user

聚合表达式:

表达式描述实例
$sum计算综合db.article.aggregate([{$group:{_id:'$by_user',num_tutorial:{$sum:'$likes'}}}])
$avg计算平均值db.article.aggregate([{$group:{_id:'$by_user',num_tutorial:{$avg:'$likes'}}}])
$min获取结合中所有文档对应值的最小值db.article.aggregate([{$group:{_id:'$by_user',num_tutorial:{$min:'$likes'}}}])
$max获取结合中所有文档对应值的最大值db.article.aggregate([{$group:{_id:'$by_user',num_tutorial:{$max:'$likes'}}}])
$push在结果文档中插入值到一个数组中db.article.aggregate([{$group:{_id:'$by_user',url:{$push:'$url'}}}])
$addToSe在结果文档中插入值到一个数组中,但不创建副本db.article.aggregate([{$group:{_id:'$by_user',url:{$addToSe:'$url'}}}])
$first根据资源文档的排序获取第一个文档数据db.article.aggregate([{$group:{_id:'$by_user',url:{$first:'$url'}}}])
$last根据资源文档的排序获取最后一个文档数据db.article.aggregate([{$group:{_id:'$by_user',url:{$last:'$url'}}}])

管道的概念

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递个下一个管道处理。管道操作是可以重复的。表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前局和管道的文档,不能处理其他的文档。

  • $project:修改输入文档的结构,可以用来重命名,增加或删除,也可以用于创建计算结果以及嵌套文档
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询。
  • $limit:用来限制MongoDB聚合管道返回的文档数
  • $skip:跳过指定数量的文档
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
  • $group:将集合中的文档分组
  • $sort:排序
  • $geoNear:输出接近某一地理位置的有序文档

管道操作实例

$project

这样子结果中就只有_id,title,author三个字段了,_id默认是被包含的

db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );

$match

match7090 group管道操作符进行处理

db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );

$skip

过滤掉前五个文档

db.article.aggregate(
    { $skip : 5 });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值