MongoDB基础
- MongoDB是最像mysql的非关系型数据库(nosql)
MongoDB组织数据的基本形式
数据库-》集合》文档
- MongoDB的集合相当于MySQL的表,MongoDB的一条文档相当于MySQL的一条数据,文档是json数据形式,键值对
- mysql一般用来存大型数据或关系比较复杂的数据,redis存轻量型,随时能取的数据,MongoDB存监控数据,容易学习
MongoDB运用场景:游戏装备等,tb物流信息,外卖等路线,键值对不固定,实时更新
运用特征:实时变化,吞吐量(qps)每秒查询量
数据类型:MongoDB中文档是json数据
MongoDB操作
- 进入MongoDB:mongo
- 退出:exit
库操作
- 使用数据库:use mydb,没有的数据库也不会报错,创建集合后数据库就存在
- 查看所有数据库:show dbs
- 查看当前所在库:db
- 删库:db.dropDatabase() #删当前所在库
集合操作
- 创建集合:db.createCollection('student')
- 查:show collections #查当前库所有的集合
- 删:db.集合名.drop()
集合文档的增删改(更新)查
- 查:db.集合名称.find()
db.student.find() #{ "_id" : ObjectId("5c03aab28686ca06b28bc71c"), "name" : "xiaoge", "age" : 16 },注意:value值单引号
db.student.find().pretty() #看着美观
db.student.find({name:'xiaoge'}) #条件查询
db.student.find({name:'xiaoge'},{}age:1}) #条件查询,只查xiaoge的age,1=true若age=0,则不显示age键值对
- 增:db.集合名称.insert(document)
db.student.insert({name:'xiaoge',age:16})增一条文档
db.student.insert({_id:1,name:"xiaoge",age:16}) #第一组键值对是索引数据,不能重复
增然后查db.student.find()
#{ "_id" : ObjectId("5c03ac1e6c2a72288afd36e3"), "name" : "xiaoge", "age" : 16 } { "_id" : 1, "name" : "xiaoge", "age" : 16 }
db.student.insert([{name:'na',age:17},{name:'jingyi',age:19}]) #增多条文档,用[ ]括起来
- 更新:全文档更新db.student.update({name:'xiaoge'},{xx:'yy')
#把匹配的第一条文档的name:'xiaoge'改为xx:'yy',整条文档(json)更新,原来的age键值对也没了
指定更新:更新文档里的某一个键值对:db.student.update({name:'xiaoge'},{$set:{age:20}}) #更改匹配的第一条
所有匹配的文档都更新:db.student.update({name:'xiaoge'},{$set:{age:20}},{multi:1})
- 删除:db.student.remove({name:'xiaoge'},{justOne:1}) #删一条
db.student.remove({name:'xiaoge'}) #匹配的全删除
python交互
import pymongo #导入包
client = pymongo.MongoClient('mongodb://localhost27017) #建立连接
databases = client.list_database_names()#获取所有数据库
db = client['xiaoge'] #获取数据库
collections = db.collection_names() #获取所有集合
col = db['student'] #获取集合
1.data = col.find({"name":"xiaoge"}) #查所有
for x in data:
print(x)
2.data=col.find_one({"name":"xiaoge"}) #指定条件查
3.条件查询
1.大于 $gt:db.collection_name.find({age: {$gt:18}})
2.大于等于 $gte:db.collection_name.find({age: {$gte:18}})
3.小于 $lt:db.collection_name.find({age: {$lt:18}})
4.小于等于 $lte:db.collection_name.find({age: {$lte:18}})
5.不等于 $ne:db.collection_name.find({age: {$ne:18}})
排序查询:sort({key:1/-1}) 表示通过字段key进行排序,-1代表倒序
# 按照年龄从大到小排序
db.student.find().sort({age:-1})data = col.find().sort('age',-1)倒序
限制查询:data = col.find().limit(3)
for item in res
print(res)
4.data=col.insert_one({"name":"wenwen","age":25}) #插一条文档
5.li=[{"name";"xiaoge","age":23},{"name":"na","age":23}] #插多条文档
data=col.insert_many(li)
6.data=col.update_one({"name":"xiaoge"},{"$set":{"age":22}}) #更新一条
7.data=col.update_many({"name":"xiaoge"},{"$set":{"age":22}}) #更新多条
8.data=col.delete_one({})#删第一条
data=col.delete_one({"name":"xiaoge"})
9.data=col.delete_many({})#删所有
data=col.delete_many({"name":"xiaoge"})