1. 学习资料
官网: Getting Started — MongoDB Manual
中文文档: MongoDB中文手册|官方文档中文版 - MongoDB-CN-Manual
2. 数据库操作
创建一个名为test的数据库
use test
只有数据库中有数据,才会真正创建一个数据库
删除数据库
db.dropDatabase()
3. collection操作
创建集合
db.createCollection("name") name是要创建的集合名
db.<collection>.insert({name:"xxx"}) 隐式创建集合,并插入数据
查看集合
show collections
删除集合
db.xxx.drop()
4. 文档操作
4.1 新增
单个文档操作
db.集合.insert(json对象)
.insertOne
多个文档操作
db.集合.insertMany([<json>,<json2>,<json3>])
.insert
db.shop.insertMany([{name:"a2",prop:"b"},{name:"c2"}])
4.2 查询
db.集合.find(<query>,[projection])
query:可选,查询条件,json对象
projection:可选,结果字段,json对象,类似于select name,age from xxx
db.xxx.find() 查询所有
db.xxx.find({}) 查询所有
db.xxx.find({"name":"zhangsan"}) // 单查询条件
db.xxx.find({"name":"zhangsan","age":18}) // 多查询条件 相当于sql的and
db.xxx.find({$and:[{"name":"zhangsan"},{"age":18}]}) 同上
db.xxx.find({$or:[{"name":"zhangsan"},{"age":18}]}) 多条件查询or
db.xxx.find({"name":/^zhang/}) 正则查询,可以相当于like
db.shop.find({name:"a"})
db.shop.find({$or:[{name:'a'},{prop:'b'}]})
name = 'a' 或者 prop = 'b'
a!= 1 | {a:{$ne:1}} |
a>1 | {a:{$gt:1}} |
>= | gte |
< | lt |
<= | lte |
a is null | {a:{$exists:false}} |
in | in |
not in | nin |
like '%xx%' | {a:/xx/} |
查询某种类型的字段type
查询类型使string的title字段
db.xxx.find({"title" : {$type : 2}}) 或 db.xxx.find({"title" : {$type : 'string'}})
嵌套 查询子文档
{a:"zhangsan",b:18,c:{name:"张三",age:18}}
db.xxx.find({c.name:"zhang"})
数组查询
db.xxx.insert({name:"xx",cpi:["a","b"]})
db.xxx.find({cpu:"a"})
db.xxx.find({$or:[{cpu:"a"},{cpu:"b"}]})
数组对象
db.xxx.insert(name:"shouji",
brand:[{name:"aaa",price:1000},{name:"bbb",price:3000},{name:"ccc",price:2000}])
db.xxx.find({"brand.name":"aaa"})
"brand.name"的双引号不能少
投影查询(有利于索引的覆盖,和聚合操作)
db.xxx.find({name:"xx"},{name:0})
不显示name字段,0表示不显示,1表示显示;
但是_id会默认显示,要是让_id不显示,要明确指定
db.xxx.find({name:"xx"},{name:0,_id:0})
db.xxx.find({},{name:0,_id:0})
4.3 修改
db.xxx.updateOne({name:"xx"},{$set:{price:xx}})
db.xxx.updateMany({name:"xx"},{$set:{price:xx}})
update和updateOne,无论匹配多少条记录,只更新第一条
db.shop.updateOne({name:'a'},{$set:{prop:'new prop'}})
修改name='a'的记录,使prop='new prop'
db.shop.updateMany({name:'a'},{$set:{prop:'new prop2'}})
update对数组的操作:
$push | 增加一个对象到数组底部 |
$pushAll | 增加多个对象到数组底部 (3.4版本合并了push和pushall到push中) |
$pop | 从数组底部删除一个对象 |
$pull | 从数组中删除某个对象 |
$pullAll | |
$addToset | 添加对象到数组 |
db.shop2.insert({name:"华为",type:["nove3","nove4","nove5","nove6","nove7"]})
db.shop2.updateOne({name:'华为'},{$push:{type:"mate30"}})
在数据底部新增一个元素