Fork me on GitHub

Any application that can be written in JavaScript, will eventually be written in JavaScript.

MongoDB 操作基础语法(shell)

我们都知道js从设计之初就是单线程的机制,其实js的本身是同步的,也是阻塞式的,之所以留给开发者的印象js是异步的是因为js所寄托的环境是在浏览器中,且提供的比如ajax,jq等一些不断完善的类库提供了丰富的异步方法,js被赋予了异步的基因,比如回调函数,事件驱动等。js称之为是基于对象的语言,事件驱动指的是由鼠标和热键的动作引发的一连串的程序操作。近期看了晚上一些写js内部运行机制的文章,觉得不错的转来一篇和大家分享。(转自阮一峰博文:链接

1.创建数据库

1
use DATABASE_NAME

2.查看数据库

1
show dbs

3. 数据库插入一些数据

1
db.runoob.insert({"name":"bevis"})

4.删除数据库

1
db.dropDatabase()

5.删除集合

1
db.COLLECTION_NAME.drop()

6.清空集合数据

1
db.COLLECTION_NAME.remove({})

7.插入文档

1
db.COLLECTION_NAME.insert(document)

e.g

1
2
3
4
5
6
7
8
db.col.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})

8.更新文档

1
2
3
4
5
6
7
8
9
db.collection.update(    
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

9.删除文档

1
2
3
4
db.collection.remove(    
<query>,
<justOne>
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。

e.g

1
db.col.remove({'title':'MongoDB 教程'})

10.查询文档

1
db.COLLECTION_NAME.find()

10.1 pretty() 方法会以格式化的方式来显示所有数据:

1
db.col.find().pretty()

10.2 findOne() 方法会只返回一个文档

1
db.col.findOne()

10.3 and 条件

mongoDB 的 find() 方法可以传入多个key,每个key以逗号隔开

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

e.g

1
db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()

10.4 or 条件

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

e.g

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

10.5 and 和 or 联合使用

e.g

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

11.条件操作符

11.1 大于操作符 $gt

e.g

1
db.col.find({"likes" : {$gt : 100}})

11.2 大于等于操作符 $gte

e.g

1
db.col.find({"likes" : {$gte : 100}})

11.3 小于操作符 $lt

e.g

1
db.col.find({"likes" : {$lt : 150}})

11.4 小于等于操作符 $lte

e.g

1
db.col.find({"likes" : {$lte : 150}})

11.5 同时使用大于和小于查询 $lt 和 $gt

e.g

1
db.col.find({"likes" : {$gt : 100, $lt : 300}})

12.$type 操作符

MongoDB 中可以使用的类型如下表所示:

e.g

若想获取 col 集合中 title 为 String 的数据:

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

13.限定读取数据条数

读取数据库时可以限定数据的数量,可以使用 limit()

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

14.跳过指定数量的数据

读取数据库时可以跳过指定数量的数据,可以使用 skip()

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

15.排序

mongoDB 中使用 sort() 方法对数据进行排序:

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

e.g

1
db.col.find({},{"title":1,_id:0}).sort({"likes":-1})

参数说明:

  • key : 1代表正序, -1代表倒序

16.索引

索引能极大的提高查询效率,若无索引,mongoDB 在读取数据时必须扫描几个中每个文件并选取那些符合条件的记录。

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

参数说明:

  • key : 1代表正序创建索引, -1代表降序创建索引

e.g

1
db.col.ensureIndex({"title":1})

ensureIndex() 接收可选参数,可选参数列表如下:

17.聚合

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

1
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

e.g

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

下表展示了一些聚合的表达式:

18.管道

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

聚合框架中常用的几个操作:

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

e.g

18.1 $project实例

1
2
3
4
5
6
db.col.aggregate({
$project : {
title : 1 ,
author : 1 ,
}
});

这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:

1
2
3
4
5
6
7
db.article.aggregate({
$project : {
_id : 0 ,
title : 1 ,
author : 1
}
});

18.2 $match实例

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

$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。

18.3 $skip实例

1
db.article.aggregate({ $skip : 5 })