本文最后更新于:4 years ago
安装MongoDB
这里只介绍用docker安装MongoDB并用navicat远程连接
安装镜像
docker pull mongo:latest
运行容器
docker run -itd --name mongo -p 27017:27017 mongo --auth
设置服务器的端口防火墙
添加安全规则,打开27017
端口
创建用户
使用MongoDB自带的admin
数据库创建用户
$ docker exec -it mongo mongo admin
# 创建一个名为 admin,密码为 123456 的用户。
> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
> db.auth('admin', '123456')
更改mongod.cnf.orig
配置文件
进入MongoDB容器
docker exec -it mongo /bin/bash
安装vim
apt-get update
apt-get install vim
修改配置文件
进入/etc
用vim mongod.cnf.orig
打开文件修改以下内容
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: 'enabled'
重启MongoDB容器
docker restart mongo
接着就可以远程使用navicat
连接了,用刚刚创建的用户,数据库写admin
Python使用MongoDB
安装pymongo
pip install pymongo
连接
import pymongo
client = pymongo.MongoClient('mongodb://用户名:密码@ip:27017/')
db = client.test #连接test数据库 等价于 client['test']
collection = db.students #stdents表 等价于 db['students']
result = collection.insert_one({'id':'200','name':'orange','age':20})
print(result) #有结果证明连接成功
插入数据
import pymongo
client = pymongo.MongoClient('mongodb://用户名:密码@ip:27017/')
db = client.test #连接test数据库 等价于 client['test']
collection = db.students #stdents表 等价于 db['students']
#插入单个数据
result = collection.insert_one({'id':'200','name':'orange','age':20})
#插入多个数据
result2 = collection.insert_many([{'id':'200','name':'orange','age':20},{'id':'200','name':'orange','age':21}])
查询数据
import pymongo
client = pymongo.MongoClient('mongodb://用户名:密码@ip:27017/')
db = client.test #连接test数据库 等价于 client['test']
collection = db.students #stdents表 等价于 db['students']
#查询所有name是wyc的
result = collection.find({'name':'wyc'})
#查询一条数据
result = collection.find_one({'name':'wyc'})
#按条件查询
result = collection.find({'age':{'$lt':20}}) #查询年龄小于20的数据
#计数
result = collection.find({'name':'wyc'}).count()
#排序
result = collection.find({'name':'wyc'}).sort('name',pymongo.ASCENDING) #name类型升序
result = collection.find({'name':'wyc'}).sort('name',pymongo.DESCEDING) #name类型降序
#偏移和限制
result = collection.find({'name':'wyc'}).sort('name',pymongo.ASCENDING).skip(2).limit(2) #忽略前两个元素和返回两个结果
print(result)
比较符号
符号 | 含义 | 示例 |
---|---|---|
$lt | 小于 | {‘age’: {‘$lt’: 20} } |
$gt | 大于 | {‘age’: {‘$gt’: 20} } |
$lte | 小于等于 | {‘age’: {‘$lte’: 20} } |
$gte | 大于等于 | {‘age’: {‘$gte’: 20} } |
$ne | 不等于 | {‘age’: {‘$ne’: 20} } |
$in | 在范围内 | {‘age’: {‘$in’: [20,23 ] } } |
$nin | 不在范围内 | {‘age’: {‘$nin’: [20,23 ]} } |
功能符号
符号 | 含义 | 示例 | 示例含义 |
---|---|---|---|
$regex | 匹配正则表达式 | {‘name’: {‘$regex’: ‘^M.*’} } | name以M开头 |
$exists | 属性是否存在 | {‘name’: {‘$exists’: True } } | name属性存在 |
$type | 类型判断 | {‘age’:{‘$type’:’int’ }} | age的类型为int |
$mod | 数字模操作 | {‘age’:{‘$mod’:[5,0] }} | 年龄模5余0 |
$text | 文本查询 | {‘$text’:{‘$search’: ‘Mike’ }} | text类型的属性中包含Mike字符串 |
$where | 高级条件查询 | {‘$where’:’obj.fans_count == obj.follows_count’} | 自身粉丝数等于关注数 |
更新数据
import pymongo
client = pymongo.MongoClient('mongodb://用户名:密码@ip:27017/')
db = client.test #连接test数据库 等价于 client['test']
collection = db.students #stdents表 等价于 db['students']
student = collection.find_one({'name':'wyc'})
student['age'] = 25
#更新一个
result = collection.update_one({'name':'wyc'},{'$set':student})
#更新多个
result = collection.update_many({'name':'wyc'},{'$inc':{'age':1}}) #年龄加一
删除数据
import pymongo
client = pymongo.MongoClient('mongodb://用户名:密码@ip:27017/')
db = client.test #连接test数据库 等价于 client['test']
collection = db.students #stdents表 等价于 db['students']
#删除一个
collection.delete_one({'name':'wyc'})
#删除多个
collection.delete_many({'name':'wyc'})
封装的方法
import pymongo
class Mongo():
def __init__(self,user,password,uri):
'''
初始化MongoDB连接
:param user: 用户名
:param password: 密码
:param uri: ip+port
'''
self.client = pymongo.MongoClient('mongodb://{}:{}@{}/'.format(user,password,uri))
con = Mongo('用户名','密码','ip:port')
db = con.client.myDb
collection = db.students
#插入数据
# result = collection.insert_one({'name':'wyc','age':13})
# result2 = collection.insert_many([{'name':'wyc','age':12},{'name':'wyl','age':11}])
# print(result,result2)
#查询
# result = collection.find({'name':'wyc'})
# for i in result:
# print(i)
# print(result)
#更新
# student = collection.find({'name':'wyc'})
# result = collection.update_one({'name':'wyc'},{'$set':student})
# result = collection.update_many({'name':'wyc'},{'$inc':{'age':1}})
# print(result)
#删除
collection.delete_many({'name':'wyc'})
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!