数据库操作
创建数据库
#如果数据库不存在,则创建数据库,否则切换到指定数据库
use database_name
查看所有数据库
show dbs
#注意:刚刚创建的数据库不会显示,如果想要显示它,需要给新建的数据库中插入数据后才会显示
查看当前使用的数据库
db
db.getName()
#输出当前数据库的名字
删除数据库
db.dropDatabase()
#删除当前数据库
断开连接与查看命令api
exit #断开命令
help #查看命令api
集合操作
查看当前数据库下有哪些集合
show collections
创建集合
db.createCollection("collectionName") #collectionName为集合名称
db.collectionName.insert(Document)
#区别:前者创建一个空的集合,后者创建一个集合,并添加了一条Document数据
删除当前数据库中的集合
db.collectionName.drop()
文档操作
插入文档
- insert()方法
实例:
#插入一个
db.mongo.insert({name:'xiaoming',age:18})
#插入多个
db.mongo.insert([{name:'xiaolan',age:20},{name:'xiaobai',age:15}])
- save()方法
实例:
#如果不指定_id字段save()方法类似于insert()方法
db.mongo.save({name:'xiaohei',age:16})
#如果指定_id字段,则会更新该_id的数据
db.mongo.save({_id:Objectld("xxxxx"),name:'xiaohuang',age:21})
更新文档
- update() 方法 用于更新已存在的文档
语法格式:
db.collectionName.update(\<query>,\<update>,{upsert:\<boolean>,multi:\<boolean>,writeConern:\<document>})
参数说明:
query update的查询条件
update update的对象和一些更新的操作符(如\$set,\$inc)等\$set直接更新,\$inc在原有基础上累加后更新
upsert 可选,如果不存在update的记录是否插入新的objNew
multi 可选,默认为false,只更新找到的第一条记录,如果为true就把按照条件查找出来的多条记录都更新
writeConcern 可选,抛出异常的级别
实例:
# 更新name为xiaolan的记录,并将第一条记录的age值改为18
db.mongo.update({name:'xiaolan'},{$set:{age:18}});
# 更新name为xiaobai的记录,并将所有记录的age值改为30
db.mongo.update({name:'xiaobai'},{$set:{age:30}},{multi:true});
# 更新name为xiaohei的记录,并将第一条记录的age值在原有基础上加1
db.mongo.update({name:'xiaohei'},{$inc:{age:1}});
- save()
语法格式:
db.collectionName.save(\<document>,{writeConern:\<document>})
参数:
document 文档数据 参照插入文档
writeConcern 可选,抛出异常的级别
查询文档
find() 方法
# 查询集合下所有的document数据
db.collectionName.find()
# 查询指定列 queryWhere 查询条件 key 要显示的字段,1表示显示 0表示不显示
db.collectionName.find({queryWhere},{key:1,key2:1})
实例:
#显示查询到的name是xiaolan记录的age值
db.mongo.find({name:'xiaolan'},{age:1})
pretty() 方法
# 以格式化的方式来显示所有文档
db.collectionName.find().pretty()
findOne() 方法
# 查询匹配结果的第一条数据
db.collectionName.findOne()
补充:queryWhere 条件操作符
| 符号 | 说明 | 语句 |
|---|---|---|
| $gt | 大于 | db.mongo.find({age:{$gt:30}}) |
| $gte | 大于等于 | db.mongo.find({age:{$gte:20}}) |
| $lt | 小于 | db.mongo.find({age:{$lt:30}}) |
| $lte | 小于等于 | db.mongo.find({age:{$lte:20}}) |
| $gte,$lte | 大于等于20 小于等于30 | db.mongo.find({age:{$gte:20,$lte:30}}) |
| : | 等于 | db.mongo.find({age:20}) |
| ObjectId | 对_id进行查询 | db.mongo.find({"_id":ObjectId("xxxxxx")}) |
| count | 查询某个结果集数据的条数 | db.mongo.find().count() |
| /value/ | 查询某个字段的值是否包含value值 | db.mongo.find({name:/xiao/}) |
| /^value/ | 查询某个字段的值是否以value值为开头 | db.mongo.find({name:/^xiao/} |
查询条件
and条件
#find()方法可以传入多个键,每个键用逗号隔开
db.mongo.find({name:'xiaobai',age:15})
or 条件
#使用or关键字 $or
db.mongo.find({$or:[{name:'xiaohei'},{age:18}]})
and、or联合使用
db.mongo.find({name:'xiaolan',$or:[{age:18},{age:20}]})
limit、skip
limit() 读取指定数量的数据记录
# 读取前3条记录
db.mongo.find().limit(3);
skip() 跳过指定数据量的数据
# 跳过前三条,输出之后的记录
db.mongo.find().skip(3);
混合使用
# 通常用来实现分页功能
db.mongo.find().limit(number).skip(number);
排序
sort({key:1}) # 升序
sort({key:-1}) # 降序
# 对查询到的结果集以age作为条件升序排列
db.mongo.find().sort({age:1});
删除文档
remove() 用来移除集合中的数据
注:在执行remove()方法之前可以先执行find()来判断执行的条件是否正确
语法格式:
db.collectionName.remove(\<query>,{justOne:\<boolean>,writeConern:\<document>})
参数说明:
query 可选,删除文档的条件
justOne 如果为true或1,则只删除一个文档
writeConcern 可选,抛出异常的级别
实例:
# 删除mongo集合中age等于18的所有文档
db.mongo.remove({age:18})
# 删除mongo集合中age等于20的第一条文档
db.mongo.remove({age:20},{justOne:true})
注:语句中最后的分号可写可不写。
Python与MongoDB的交互
import pymongo
from pymongo import MongoClient
from bson.objetid import ObjectId
#连接数据库
conn = MongoClient('本机ip', 27017)
db = conn.mydb #连接mydb数据库,没有则自动创建
my_test = db.test #使用test集合,没有则自动创建
......
conn.close() # 断开连接