Mongodb
[toc]
基本命令
列出所有的数据库
show databases
show dbs
进入数据库
use 数据库名称
查看当前数据库
db
列出当前数据库中的所有集合
show collections
清空集合
db..remove({})
删除集合
db..drop()
删除数据库
db.dropDatabase()
插入数据
向集合中插入数据
db..insert({"name": "王哈哈", "age": 24})
db..insert([
{"name": "张三", "age": 24},
{"name": "李四", "age": 24},
{"name": "王五", "age": 24},
{"name": "马六", "age": 24}
])
db.demo.insertOne({"name": "abc"})
db.demo.insertMany([
{"name": "wang1", "age": 24},
{"name": "wang2", "age": 23}
])
查询数据
查询集合中的所有数据
db..find()
查询集合中的单条数据
db..find_one()
按条件查找数据
db..find({"name": "wanghaha", "age": 24})
db..findOne({"name": "wanghaha"})
db..findOne({"name": "wanghaha"}).name
获取数据长度
db..find().count()
db..find().length()
修改数据
修改数据
db..update(查询条件, 新对象)
update()
默认情况下会使用新对象替换旧的对象, 默认只会修改一个
$set
可以用来修改文档中的指定属性
$unset
可以用来删除文档的指定属性
修改一个符合条件的文档
db.demo.update({"name": "hello"}, {
$set: {"age": 23}
})
db.demo.updateOne(
{"_id": ObjectId("5f34bcc44040779b0fc1c207")},
{$set:{"name": "wanghaha"}}
)
删除符合条件的文档属性
db.demo.updateOne(
{"name": "马六"},
{$unset:{"name": "马六"}}
)
修改多个符合条件的文档
db.demo.update(
{"name": "wanghaha"},
{
$set:{"sex": 2},
},
{
multi: true
}
)
db.demo.updateMany({"name": "wanghaha"}, {$set:{"address": "china"}})
替换符合条件的文档
db.demo.replaceOne({"name": "wanghaha"}, {$set:{"age": 25}})
删除数据
删除一条文档
db..deleteOne({"name": "王哈哈"})
db..remove()
删除一个或多个,第二个参数传递true则只会删除一个
如果传递一个空对象则会清空所有数据
删除多条符合条件的文档
db..deleteMany()
高级操作
文档中添加指定数据
db.chart.update(
{"_id":ObjectId("5f351285a4fc6a39518b5e84")},
{$push: {"legend.data":"老王"}}
)
文档中数组李添加指定数据,如果已经存在则不会添加
db.chart.update(
{"_id":ObjectId("5f351285a4fc6a39518b5e84")},
{$addToSet: {"legend.data":"老王"}}
)
删除多级结构数组中的一个
db.chart.update(
{"_id":ObjectId("5f351285a4fc6a39518b5e84")},
{$pull: {"legend.data":"wanghaha"}}
)
删除多级结构数组中的最后一个
db.chart.update(
{"_id":ObjectId("5f351285a4fc6a39518b5e84")},
{$pop : { "legend.data" : 1 }}
)
批量插入
var arr = [];
for(var i=0;i<20000;i++){
arr.push({"num": i})
}
db.numbers.insert(arr)
操作符
条件操作符
// 查询等于500的
db.numbers.find({"num": 500})
db.numbers.find({"num": {$eq: 500}})
// 查询大于500的
db.numbers.find({"num": {$gt: 500}})
// 查询大于等于500的
db.numbers.find({"num": {$gte: 500}})
// 查询小于500的
db.numbers.find({"num": {$lt: 500}})
// 查询小于等于500的
db.numbers.find({"num": {$lte: 500}})
// 查询不等于500的
db.numbers.find({"num": {$ne: 500}})
// 查询大于40并且小于50
db.numbers.find({"num": {$gt:40, $lt:50}})
// 查询大于19990或小于10的
db.numbers.find(
{
$or: [
{
"num": {$gt: 19990}
},
{
"num": {$lt: 10}
}
]
}
)
// 查询财务部所有员工
var deptno = db.dept.findOne({name: '财务部'}).deptno
db.emp.find({deptno: deptno})
限制长度
// 查看前10条数据 limit 设置显示数据的上限
db.numbers.find().limit(10)
// 查看11到20条数据, skip()用于跳过指定数量的数据
db.numbers.find().skip(10).limit(10)
扩展(分页逻辑)
/*分页逻辑
每页显示10条
1-10
11-20
21-30
...
*/
skip((当前页码-1)*每页显示条数).limit(每页显示条数)
自增自减操作
// 所有人的age自增5
db.test.updateMany({}, {$inc: {age: 5}})
// 所有人的age自减10
db.test.updateMany({}, {$inc: {age: -10}})
排序
升序
// 1.表示升序
db..find().sort({'字段A', 1})
降序
// -1.表示降序
db..find().sort({'字段B', -1})
多字段排序
// 先按A字段升序排列,再按B字段降序排列
db..find().sort({'字段A': 1, '字段B': -1})
投影
只显示指定字段
// 投影
// 只显示指定字段, 1显示,0不显示
db..find({}, {field1: 1, _id: 0})
语言操作库
- Python -
pymongo
- Golang -
qmgo
(https://github.com/develop1024/qmgo)