MongoDB常用命令

MongoDB基础命令

[toc]

数据库相关

创建 & 使用数据库

1
2
# 如果数据库存在,则切换至对应数据库,否则创建
use database_name

查看数据库

1
show dbs

查看当前数据库名字

1
db

删除当前数据库

1
2
use users
db.dropDatabase()

删除数据库下的集合

1
db.collection_name.drop()

集合相关

创建集合

1
db.createCollection(name,option)

option

  • capped true/false 如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
  • autoIndexId true/false 如为 true,自动在 _id 字段创建索引。默认为 false
  • size 数据型为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段
  • max 指定固定集合中包含文档的最大数量

插入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
db.users.insert({
name:'sid.lee',
age:30,
sex:'男',
})

// or
user = {
name:'maschen',
age:27,
sex:'男'
};

db.users.insert(user)

更新数据

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 :可选,抛出异常的级别。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
db.users.update(
{
'name':'sid.lee' // 条件,name为sid.lee
},
{
$set :{'name':'lvxx'} //更新动作,把name值改为lvxx
}
);

// 如果匹配多条结果,则全部更新(第四个参数)
db.users.update({'name':'lvxx'},{$set:{'name':'sss'}},false,true);

//如果未查到结果,则创建数据(第三个参数),否则仅更新一条记录(第四个参数)
db.users.update({'name':'lvxx'},{$set:{'name':'sss'}},true,false);

替换数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 格式
db.collection.save(
<document>,
{
writeConcern: <document>
}
)

# 实例
db.users.save({
'_id':ObjectId('5bf7b1e8e983c23ee94af892'), //一定要带主键,否则就是新增,且要把_id值传入ObjectId(),否则也是新增
'name':'lvxx',
'age':34,
'sex':'man'
});

删除文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 格式

db.collection.remove(
<query>,
<justOne>
)

# mongodb 2.6以后的版本则如下
# PS: 测试的时候,貌似两种写法都ok

db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
1
2
3
4
5
# 仅删除一条
db.users.remove({'name':'lvxx'},1);

# 全部删除 = mysql truncate
db.users.remove({});

查询数据

1
2
3
4
5
6
7
db.collection.find(query, projection)

#只返回一个文档
db.collection.findOne(query, projection)

#美化输出,加个pretty()
db.col.find().pretty()
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。(PS:说白了就是想返回哪些字段,在这里列下,如果省略,则返回所有)

操作符

操作 格式 范例 mysql
等于 {'key':'value'} db.col.find({"name":"lxx"}).pretty() where name = 'lvxx'
小于 {'key':{$lt:'value'}} db.col.find({"age":{$lt:50}}).pretty() where age < 50
小于或等于 {'key':{$lte:'value'}} db.col.find({"age":{$lte:50}}).pretty() where age <= 50
大于 {'key':{$gt:'value'}} db.col.find({"age":{$gt:50}}).pretty() where age > 50
大于 {'key':{$gte:'value'}} db.col.find({"age":{$gte:50}}).pretty() where age >= 50
不等于 {'key':{$ne:'value'}} db.col.find({"age":{$ne:50}}).pretty() where age <> 50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# AND操作符
db.col.find({key1:value1, key2:value2}).pretty()

# OR操作符
>db.col.find(
{
$or: [ //数组
{key1: value1}, {key2:value2}
]
}
).pretty()

# AND OR 联合使用 where lies > 50 and (by = 'fix' or title= 'MongoDB')

db.col.find({"likes": {$gt:50}, $or: [{"by": "fix"},{"title": "MongoDB"}]}).pretty()

$type 操作符

$type操作符是用于匹配mongo里列的数据类型的,类型与对照表如下:

类型 对应数字 备注
Double 1
String 2
Object 3
Array 4
Binary data 5
Undefined 6 已废弃
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 13
Symbol 14
JavaScript (with scope) 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255
Max key 127
1
2
3
4
5
6
7
# 获取集合中title是字符串(string)的所有数据

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

or

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

limit & skip (分页)

  • limit(number) :请求多少条数据 与mysql中的limit相同
  • skip(number): 跳过多少条记录,或者从第几条开始
1
2
# 格式
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

1
2
3
4
5
db.COLLECTION_NAME.find().sort({KEY:1}) //升序

or

db.COLLECTION_NAME.find().sort({KEY:-1}) // 降序

索引

1
2
# 格式
db.collection.createIndex(keys, options)
  • background 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false
  • unique 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
  • name 指定索引名 如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
1
2
3
4
5
# 通过在创建索引时加 background:true 的选项,让创建工作在后台执行
db.users.createIndex({name,1},{backgroud:true});

# 创建惟一索引并指定索引名
db.users.createIndex({name:1}, {unique:true,name:'name'})

删除索引

1
2
3
db.users.dropIndex(keys,ptions)

db.users.dropIndex('name');