MongoDB基本操作
该文章简单记录了在shell命令中的基本操作,方便随时查看
1、创建或连接到指定的数据库:use dbname
2、删除数据库:db.dropDatabase()
注:必须指定了一个数据库之后才能删除这个数据库,即使用了use命令之后
3、显示所有数据库:show dbs
4、显示当前数据库对象或集合:db
5、创建一个集合(相当于数据库中的表):db.createCollection("tablename")
带参数的用法举例:db.createCollection("mycol",{ capped : true, autoIndexId : true, size : 6142800, max : 10000})
说明:创建固定集合mycol,整个集合大小空间6142800KB,文档最大个数为10000个
6、显示数据库中所有的集合:show tables 或者 show collections
7、删除一个集合:db.tablename.drop()
8、插入数据:db.tablename.insert({name:"JS"})
在一个数据库中,不需要专门创建一个集合,当插入一些文档时mongodb会自动创建集合
9、更新数据:
db.tablename.update({colname:colvalue},{$set:{cloname:newvalue}},true/false,true/false)
后面两个参数说明:
(1)省略的状态,只更新第一条记录
(2)false,true,全部更新
(3)true,false,只添加第一条
(4)true,true,全部添加进去
(5)false,false,只更新第一条记录,同(1)
10、删除一条记录:db.tablename.remove({colname:colvalue})
说明:如果只想删除第一条找到的记录,可以讲第二个参数设置为1,实际上,不管将第二个参数设置为几,都会删除找到的第一条记录db.tablename.remove({colname:colvalue}, 1)
网友评论说remove()的方法已经过时,现在官方推荐使用deleteOne()和deleteMany()
使用方法如下:
(1)删除集合下全部文档:db.tablename.deleteMany({})
(2)删除status等于A的全部文档:db.tablename.deleteMany({status:"A"})
(3)删除status等于D的一个文档:db.tablename.deleteOne({status:"D"})
经本人测试,截至该文章发布之时,均可用
11、查询文档:db.tablename.find()
可在find()后添加pretty()显示易读的格式:db.tablename.find().pretty()
AND条件查询:db.tablename.find({key1:value1,key2:value2}),相当于SQL的AND
OR条件查询:db.tablename.find({ $or: [{key1:value1},{key2:value2}]}),相当于SQL的OR
也可以对AND和OR联合使用
12、操作符
(1)大于>:$gt(greater than) 例如:db.col.find({likes : {$gte : 100}})——>获取"col"集合中 "likes" 大于等于 100 的数据
(2)小于<:$lt(less than)
(3)大于等于≥:$gte(greater than or equal)
(4)小于等于≤:$lte(less than or equal)
(5)不等于!=:$ne(not equal)
(6)等于=:$eq(equal)
获取某个范围内的值:db.col.find({likes : {$lt :200, $gt : 100}})——>获取"col"集合中 "likes" 大于100,小于 200 的数据
补充模糊查询:查询 title 包含"教"字的文档——>db.col.find({title:/教/})
查询 title 字段以"教"字开头的文档——>db.col.find({title:/^教/})
查询 titl e字段以"教"字结尾的文档——>db.col.find({title:/教$/})
13、type操作符
MongoDB 中可以使用的类型如下表所示:
注:表格资源来源于菜鸟教程
类型 | 数字 | 备注 |
---|---|---|
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 | Query with -1. |
Max key | 127 |
使用举例:如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:
db.col.find({title:{$type:2}}) 或者 db.col.find({title:{$type:'string'}})
注:在字符串的引用中,可以使用双引号,也可以使用单引号,如上面的string类型的引用,亲测效果一致,但是如果不使用引号时,就会报错;在插入数据时,如果想插入字符串类型的内容,不使用引号则会报错,如下图所示
但如果插入的内容是数值类型,添加引号与不添加引号时也是不一样的,如下图所示,同样level为2的数据,当筛选level为string类型的数据时,只有一行数据被筛选出来
14、读取指定数量的数据记录:db.tablename.find().limit(number)
相当于SQL中的TOP N
15、读取跳过前面指定行数的数据记录:db.tablename.find().skip(number)
说明:如果number为1,则显示第一行之后的所有数据,即显示从第二行开始的数据,以此类推
这个方法相当于是limit()的取反操作
16、排序
db.tablename.find().sort({colname:1}) ——升序排列
db.tablename.find().sort({colname:-1})——降序排列
注:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()
17、索引
1)创建索引:db.tablename.createIndex({colname:1})——1为指定按升序创建索引,-1则为降序
2)创建复合索引:db.tablename.createIndex({colname1:1,colname2:-1})
createIndex() 接收可选参数,可选参数列表如下:
举例:在后台创建索引:db.tablename.createIndex({colname1:1,colname2:-1},{background:true})
Parameter | Type | Description |
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。 |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
dropDups | Boolean | 3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language. |