基本的增删改查
查看当前所有的数据库
show dbs
创建,使用数据库
存在则使用,不存在则新建
use demo
再来show一下
可以看到,新建的数据库并不在数据库的列表中, 要显示它,我们需要向新建的数据库插入一些数据
创建集合
分为显式和隐式两种
显式创建
db.createCollection("test",{capped:"ture",size:60000,max:100})
capped:为true,表示这是个封闭的集合,使用此参数需要指定size的值
size:指定上限集合的最大大小(以字节为单位)
max:指定上限集合中允许的最大文档数
隐式创建
直接插入文档,就创建了集合
db.class.insert({"name":"mongo教程"})
隐式创建了名为class的集合
两种方式都可以使新建的数据库显示在数据库的列表中,但是在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
可以看到显示创建的test集合并查询没有返回结果(还没有插入文档)
查询集合中的文档
db.class.find()
可以看到插入的文档多了一个_id字段,这个字段可以插入时指定,否则会自动为其分配唯一的ObjectId值,其值与执行操作的机器和时间有关,注意_id和id是不同的
3.2版本后mongodb针对插入一条还是多条数据提供了更为可靠的insertOne()和insertMany()方法
insertOne()
db.test.insertOne({"name":"小明","age":15})
insertMany()
db.test.insertMany([
{"name":"小红","age":20},
{"name":"小王","age":21,address:"北京"},
{"name":"小陈","age":15,address:"上海"}
])
有序地插入多个文档
db.test.insert([
... {_id:5,"name":"老大","age":"34"},
... {_id:7,name:"老二","age":"33"},
... {_id:6,name:"老三","age":"33"},
... {_id:6,name:“老四”,“age”:null}
... ],
... {ordered:true}
... )
这里的有序指的并不是_id的顺序,如果存在某条待插入的文档和已有的文档_id相同的情况,则此文档和后续的文档都不在插入,设置ordered为false时除了出错的记录以外都继续插入
以变量的方式插入文档
document=({name:"小白","age":21})
db.test.insert(document)
插入文档也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据
更新文档
db.class.update(
... {name:"mongo教程"},
... {$set:{name:"nosql",book_id:"001"}}
... )
删除class中book_id为001的文档
db.class.remove({"book_id":"001"})
删除book_id大于003的文档
db.class.remove({ book_id:{$gt:"003"} })
查询操作
美化查询输出(格式化查询输出)
db.test.find().pretty()
还可以使用findOne()方法,只返回一个文档
操作符 | 实例 |
等于 =(:) | db.test.find({age:20}) |
大于 > ($gt) | db.test.find({age:{$gt:20}}) |
小于 < ($lt) | db.test.find({age:{$lt:30}}) |
大于等于 >= ($gte) | db.test.find({age:{$gte:20}}) |
小于等于 <= ($lte) | db.test.find({age:{$lte:20}}) |
不等于 != ($ne) | db.test.find({age:{$ne:20}}) |
与 and () | db.test.find({name:“小红”,age:20}) |
或 or () | db.test.find({$or:[{name:“小红”},{age:“30”}]}) |
查询age为null
db.test.find({age:null})
注意age:"",age:“null”,age:null 是不相同的
插入一个包含数组的文档
db.test.insert({"name":"工具","quantity":3,"tags":["锤子","钳子","锯子"]})
db.test.insert({"name":"工人","quantity":2,"tags":["长工","短工"]})
查询数组
db.test.find({tags:["长工","短工"]})
查询有3个元素的数组
db.test.find({tags:{$size:3}})
查询数组里的某一个值
db.test.find({tags:"锤子"})
限制查询结果的个数
db.test.find().limit(3)
返回的是集合中的前三个文档
skip()用于略过指定个数的文档
db.test.find().skip(1)
与limit组合使用
db.test.find().limit(3).skip(1)
sort()用于对查询结果进行排序,1是升序,-1是降序
db.test.find().sort({"_id":1})