数据库操作
查看当前数据库
db
查看所有数据库
show databases
切换数据库(如果没有会自动创建)
use dbname
删除当前数据库(删除数据库所有集合)
db.dropDatabase()
集合的操作
查看当前数据的所有集合(相当于表)
show collections
创建新的集合
db.createCollection("Emp",{capped:true,size:6124800,max:10000})
或者不加可选参数
db.createCollection("Emp")
删除集合
db.Emp.drop()
查看集合的详情
db.Emp.find()
格式化查看
db.Emp.find().pretty()
向集合插入数据
document={name:'zhangsan',age:'10',sex:'male'} --插入数据时,可以先创建一个文档
db.Emp.insert(document)
db.Emp.save(document) //save只能加一条数据
***注意点***
save吧document的_id固定下来
使用save操作某个document后,insert方法就不可使用了。否则可以一直使用insert
插入一条数据
db.Emp.insert({name:'zhangsan'});
db.Emp.insertOne({"a":3})
插入多条数据
db.Emp.insertMany({name:'sss'},{name:'zz',age:'11'})//不加Many也可
[thread1] TypeError: documents.map is not a function :
DBCollection.prototype.insertMany@src/mongo/shell/crud_api.js:283:1
一次插入多条
需要用[] 括起来
db.Emp.insertMany([{name:'sss'},{name:'zz',age:'11'}])
集合数据的更新
更新一条数据
db.Emp.update({'name':'chen'},{$set:{'name':'xiaochen'}}) //默认改第一条name为xiaochen的
只更新一条时set可以省略
省略时是这样 db.Emp.update({'name':'chen'},{'name':'xiaochen'})//是把外面的{$set:} 都去掉了
db.Emp.update({_id:ObjectId("5d399db3cd6648e542dac1aa”),’name':'chen'},{$set:{'name':'xiaochen'}}) //加上_id去更新 这样就指定哪一个更新了 更准确
注意
造成该问题的原因是集合被设置成了 固定集合 。固定集合的数据不能被修改(只能改成相同长度的数据)。只能查找-删除-再插入
"errmsg" : "Cannot change the size of a document in a capped collection: 48 != 51"
更新多条数据
db.Emp.update({'name':'xiaochen'},{$set:{'name':'xiaolan'}},{multi:true})
//可以一次更新多条 ,这时要将multi设置成true
//这样也是更新多条
db.Emp.updateMany({'name':'xiaochen'},{$set:{'name':'xiaolan'}})
集合数据查询
$gt : >
$lt : <
$gte: >=
$lte: <=
$ne : !=、$amp;$in : in
$nin: not in
$all: all
$not: 反匹配(1.3.3及以上版本)
逻辑与或
> db.user.find({"name":"xiaolan"})
> db.user.find({"name":"xiaolan","hobby":["song1","writebook"]}) --- 直接写多个,中间以,隔开
> db.user.find({$or:[{"name":"xiaolan"},{"age":"10"}] }) --或:以$or开头,后面跟的是[]
> db.user.distinct('name'); --去掉重复数据
[ "sanzhang", "s", "qing", "qingqing", "sss", "dsd" ]//这样出来的是每条数据的名字 除了重复的
> db.user.find({name:/ao/}) --模糊查询 注意:必须有{}
> db.user.find({name:/^ao/}) --模糊查询 以ao开头
> db.user.find({name:/ao$/}) --模糊查询 以ao结尾
> db.user.find({},{"name":1,_id:0}).limit(2) --查询前两条记录,只显示name 注意:find后面第一个空的{}必须有 name后面的1代表显示 ,0是不显示
--_id:0 表示不显示_id limit(2) 表示查询2条
如果存在需要查询的列就输出,否则就不输出
> db.user.find({},{"name":1,_id:0}).limit(3).skip(1) --跳过前几条,查询后面的3条
> db.user.find({},{"age":1,_id:1}).limit(2).skip(1) --显示age,同时显示_id
> db.user.find({},{"age":1,_id:0})
> db.user.find({},{"age":1}).limit(2).skip(1) --默认显示_id
> db.user.find({},{"age":0,_id:0}).limit(2).skip(1) ---"age":0 表示显示除age以外的内容
集合数据的删除
db.user.remove();#删除所有数据 //这样报错 不支持这样删除所有集合
[thread1] Error: remove needs a query
db.user.remove({});
结果成功 :WriteResult({ "nRemoved" : 5 })
db.user.remove({"sex":"女"});#按照条件删除
db.user.remove({"name":"张无忌"},2);#删除几条
mongo在删除数据的时候不支持 all * 全部删除选择{}就可以全部删除了
remove()函数不会删除集合本身,同时,原有的索引也同样不会被删除。