mongodb数据库
mongodb数据库,是典型的非关系型数据库(也有说是介于关系数据库和非关系数据库之间),存储数据类型为字典型(键值对),例如 {"a":123, "b":"abc"}
。
其特点是操作简易,可扩展性强,可以基于分布式,用于数据存取和日志记录等。
下面从常规的命令行操作和python操作进行记录。
命令行操作
1、配置数据库
假设mongodb的安装目录(mongod.exe文件所在目录)为 “C:\Program Files\MongoDB\Server\4.0\bin”,目录内配置文件为mongod.cfg。编辑mongod.cfg文件:
bindIp所在行全部删除,修改为 bindIp 0.0.0.0
或 bindIpAll: true
,目的是可以使其他ip地址可以访问,如果限制为只有本机可以访问,则修改为bindIp 127.0.0.1
。
如果要对数据库设置密码访问,则需要如下修改:
security:
authorization: enabled
添加mongod服务为系统服务,且配置文件为mongod.cfg,无绑定ip。
mongod.exe --config "C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg" --bind_ip 0.0.0.0 --install
删除mongod服务
"C:\Program Files\MongoDB\Server\4.0\bin\mongod.exe" --remove
启动服务
net start mongodb
关闭服务
net stop mongodb
查看已存在的用户
show users
删除数据库ets的用户scan1
use ets
db.dropUser('scan1')
连接的mongo服务器返回XXX:SECONDARY>时,解决办法,输入以下命令
rs.slaveOk()
为数据库test创建用户账号(用户名youruser,密码yourpassword),设置权限dbOwner
use test
db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "test" }] })
使用账号登录, 返回1,则表示登录成功
use test
db.auth("youruser","yourpassword")
2、操作数据库
需要注意的是,无需专门建立数据库和列表(collection,也叫集合)。
查看数据库
show dbs
选择数据库database1,如果database1不存在,则创建一个名为database1的数据库:
use database1
查看数据库内所有 列表
show collections
查看列表中的所有数据(文档)
# 列表名为files
db.files.find()
# 列表名为file12*-23,包含特殊字符时
db.getCollection("file12*-23").find()
查看列表file12*-23中的10条数据
db.getCollection("file12*-23").find().limit(10)
对查询结果进行排序
# 按照 id 降序排列
db.users.find().sort({'id':-1})
# 按照 id 升序排列
db.users.find().sort({'id':1})
查看列表file12*-23包含的数据条数
db.getCollection("file12*-23").count()
删除数据库test
use test;
db.dropDatabase()
删除列表users
db.users.drop()
删除列表col中满足条件的数据
db.col.remove({'title':'MongoDB'})
# 或者使用下面方法
# 删除列表所有数据
db.col.deleteMany({})
# 删除满足条件的 一条数据
db.coldeleteOne( { status: "D" } )
# 删除满足条件的 多条数据
db.col.deleteMany( { status: "D" } )
向列表collect中插入数据
# 插入一条数据
db.collect.insertOne({"aa": 11})
# 插入多条数据
db.collect.insertMany([{"bb": 22}, {'cc': 33}])
更新数据
# 更新单条数据,被更新数据条件 name="abc",修改age为28
db.collect.updateOne({"name":"abc"},{$set:{"age":"28"}})
# 修改多条数据,age大于10的数据,修改其status为xyz
db.collect.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
信息批量(具体到键名a,b,c,d)导出到文件123.csv:
mongoexport --host 1.2.3.6 --port 27017 -d database -c collection -f a,b,c,d --csv -o 123.csv
导出整个collection(非scv格式,dat格式),命令行执行,无需客户端连接,目标ip为20.12.10.3,端口27017,数据库premierecin,列表User。
mongoexport --host 20.12.10.3 --port 27017 -d premierecin -c "User" -o 204.dat
python操作
需要用到第三方库pymongo,使用pip安装:pip install pymongo
建立数据库连接:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
关闭数据库连接
myclient.close()
选择(建立)数据库 newdb1
db1=myclient['newdb1']
如果设置了数据库密码(用户mongo_user,密码mongo_pass),则需要认证:
db1.authenticate("mongo_user", "mongo_pass")
选择列表(collection)collect1
table3=db1['collect1']
查询数据
# 数据查找, 返回对象
table3.find_one({'name': 'jack'}) # 返回字典
table3.find({'name': 'jack'}) #返回对象,使用list 转化为包含字典的列表
# 范围查找,age 大于 20
table3.find({'age': {'$gt': 20}})
# 使用正则匹配, name 以jac开头
table3.find({'name': {'$regex': '^jac.*'}})
# 查询所有数据, 慎用
tmp=table3.find({})
# 结果是一个pymongo的对象, 转化为列表之后才能调用
tt=list(tmp)
数据排序
# 对查询结果进行排序,升序
table3.find().sort('name', pymongo.ASCENDING)
# 数据筛选,排序后,去掉前3个,选择5条数据
table3.find().sort('name', pymongo.ASCENDING).skip(3).limit(5)
数据总数查询
table3.find().count()
table3.find({'age': 20}).count()
插入数据
data1 = {'age': 19, 'name': 'jack'}
data2 = {'gender': 'male', 'name': 'hh'}
#插入一条
table3.insert_one(data1)
table3.insert_one(data2)
#插入多条
table3.insert([data2,data1])
table3.insert_many([data2,data1])
删除数据
# 删除一条 name为Kevin的数据
result = table3.remove({'name': 'Kevin'})
result = table3.delete_one({'name': 'Kevin'})
# 删除多条 age小于25 的数据
result = table3.delete_many({'age': {'$lt': 25}})
# 查看成功删除的数据条数
print(result.deleted_count)
数据更新
# 先查询,再更新
condition = {'name': 'Kevin'}
student = table3.find_one(condition)
student['age'] = 25
result = table3.update_one(condition, {'$set': student})
# 更新多条,符合条件(age大于20)的数据,其age都会加1
condition = {'age': {'$gt': 20}}
result = table3.update_many(condition, {'$inc': {'age': 1}})