mogonDB的基本指令
1. 基本指令
show dbs/databases: 查看当前所有的数据库
use (数据库名): 进入到指定的数据库中
db: 显示当前所处的数据库
show collections: 显示当前数据库中所有的集合
2. MongoDB的CRUD(增删改查)操作
2.1 插入: db.<collection>.insert(doc)
向数据库的指定集合中插入一个或多个文档
例如:
db.stu.insert({name:'Tom', age:18, gender:'male'})
db.stu.insert([{name:'Jerry', age:18, gender:'male'},{name:'Herry',age:20,gender:'female'}])
如果插入时没有给文档指定_id属性,则数据库会自动为文档添加_id属性(ObjectId)
相关方法:
db.<collection>.insertOne() —— 插入一个文档对象
db.<collection>.insertMany() —— 插入多个文档对象
如何插入10000条数据?
可以用for循环:
for(var i=0; i<10000; i++){
db.numbers.insert({num:i});
}
但是要注意效率与性能问题:尽量减少对数据库的操作!
var arr = [];
for(var i=0; i<10000; i++){
arr.push({num:i});
}
db.numbers.insert(arr);
2.2 查询: db.<collection>.find()
查询集合中的所有文档,返回的是一个数组。
例: db.stu.find()
可以接收一个对象作为条件参数,表示查询符合条件的文档,{}表示查询所有。
例: db.stu.find({age:20})
支持通过内嵌文档的属性进行查询,通过.来匹配,注意属性名必须加引号!
例: db.stu.find({'hobby.movies':'comedy'})
并不是说属性值一定要等于该值,如果属性值是一个数组,只要数组中包含该值即可!
相关方法:
db.<collection>.findOne() —— 查询集合中符合条件的第一个文档,返回的是一个文档对象。
db.<collection>.find({}).count() —— 查询集合中符合条件的文档的数量,返回一个数值。
db.<collection>.find({}).limit(10) —— 设置返回查询的数据的上限。
db.<collection>.find({}).skip(10).limit(10) —— 返回第11条到第20条数据。
db.<collection>.find({}).sort({num:1, age:-1}) —— 传递一个对象来指定排序规则,1表示升序,-1表示降序
MongoDB会自动调整sort、skip和limit的位置,谁写前谁写后并无大碍。
distinct()对数据进行去重: db.stu.distinct('class',{age:{$gt:18}}) —— 查找年龄大于18的人的班级(去重)
投影:
在做查询时,可以在第二个参数设置查询结果的投影,1表示显示,0表示不显示。
db.<collection>.find({}, {name:1}) —— 显示该集合文档的name字段和id字段(id默认显示)。
一些查询相关的运算符:
$gt、$lt、gte、lte
db.stu.find({num:{$gt:20, $lt:30}}) —— 返回num值大于20小于30的文档。
$or表示或,只要满足数组其中一个条件即可:
db.stu.find({$or:[{num:{$lt:100}}, {num:{$gt:200}}]}) —— 返回num值小于100或者大于200的文档。
2.3 修改: db.<collection>.update({查询条件},{新对象},{options})
默认情况下会使用新对象来替换旧的对象。
如果需要修改指定的属性而不是替换,需要使用修改操作符来完成修改
$set 可以用来增加或修改文档中的指定属性
如: db.stu.update({"_id":1}, {$set:{age:22,address:'China'}})
$unset 可以用来删除文档中的指定属性
如: db.stu.update({"_id":1}, {$unset:{address:'这里是什么不重要,反正要删除'}})
update()默认情况下只改变一个,如果需要同时修改多个,增加第三个配置参数{multi:true},或者使用updateMany()。
如果属性是一个数组,需要往数组中加入新的元素,则可以使用操作符$push:
如: db.stu.update({username:'Tom'},{$push:{'hobby.movies':'Mr Bean'}})
$each可以对数组进行解构:{$push: {a: {$each: [1,2]}}} —— 向数组a中加入1和2。
$addToSet操作符也可向数组中添加一个新元素,与$push的区别是,不允许添加重复的元素。
使用操作符$pop从数组中移除一个元素,1代表最后一个元素,-1代表第一个元素:
{$pop: {a: 1}} —— 从数组a中移除最后一个元素
{$pop: {a: -1}} —— 从数组a中移除第一个元素
使用操作符$pull从数组中移除所有的指定元素:
{$pull: {a: 5}} —— 移除数组a中所有值为5的元素。
使用操作符$pullAll来移除所有的多个指定元素:
{$pullAll: {a: [5, 6]}} —— 移除数组a中所有值为5或6的元素。
让属性值在原有基础上自增,使用操作符$inc:
db.stu.updateMany({num:{$lt:1000}}, {$inc:{num:400}}) —— 让所有num小于1000的文档num值增加400
相关方法:
db.<collection>.updateOne() —— 修改一个符合条件的文档
db.<collection>.updateMany() —— 修改多个符合条件的文档
db.<collection>.replaceOne() —— 替换一个文档中的某些属性
2.4 删除: db.<collection>.remove({},Boolean)
remove()必须传入参数,可以根据条件对象来删除文档,传递条件的方式和find()一样,默认情况下会同时删除多个,相当于deleteMany()。
如果传入第二个参数为true,则只会删除一个,相当于deleteOne()。
如果传入第一个参数对象为{},则会清空所有的文档,相当于删除集合,但是性能比较差,不如用db.<collection>.drop()。
相关方法:
db.<collection>.deleteOne() —— 删除一个
db.<collection>.deleteMany() —— 删除多个
db.<collection>.drop() —— 删除集合
db.dropDatabase() —— 删除数据库
一般在实际生产中,数据不会真正地删除,而是做逻辑删除。比如给集合中的每个文档增加一个数据字段isDel,设置值为1,标记为删除。