mongodb数据库常用操作记录(持续更新)

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.0bindIpAll: 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}})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值