MongoDB 复习

244 阅读3分钟

数据库操作

创建数据库

#如果数据库不存在,则创建数据库,否则切换到指定数据库
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()     # 断开连接