pymongo-MongoDB

Docker 安装 MongoDB

docker pull mongo:latest
docker run -itd --name mongo -p 27017:27017 mongo --auth

参数说明:

-p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。

--auth:需要密码才能访问容器服务。

接着使用以下命令添加用户和设置密码,并且尝试连接。

$ docker exec -it mongo mongo admin

创建一个名为 admin,密码为 123456 的用户。

> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

尝试使用上面创建的用户信息进行连接。

> db.auth('admin', '123456')

安装PyMongo

pip install pymongo

MongoDB的URI格式如下:mongodb://用户名:密码@服务器IP或域名:端口

如果没有设置权限验证,则不需要用户名和密码

conn = pymongo.MongoClient('mongodb://45.10.110.77:27017')

要设置 pymongo 的超时功能,需要两个参数serverSelectionTimeoutMS,socketTimeoutMS,这两个参数的值的单位都是毫秒

import pymongo
conn = pymongo.MongoClient('mongodb://admin:123456@127.0.0.1:27017',serverSelectionTimeoutMS=5000, socketTimeoutMS=5000)
database = conn.testDB
# database = conn['testDB']
collection = database.table1
# collection = database['table1']

# 使用Python批量插入数据
# collection.insert_many([
#    {'name': '王小二','age':21,'student':True,'address':'广州'},
#    {'name': '赵小三','age':20,'student':True,'address':'北京'},
#    {'name': '钱小四','age':21,'student':True,'address':'上海'},
#    {'name': '孙小五','age':20,'student':True,'address':'山东'},
#    {'name': '李小六','age': None,'student':True,'address':'河北'},
#    {'name': '欧阳小七','age':24,'student':False,'address':'杭州'},
#    {'name': '公孙小八','age':25,'student':False,'address':'广州'}
#  ])

# 插入一条数据
# collection.insert_one({'name': '刘小九','age':27,'student':False,'address':'合肥'})

# 查询第一条数据
x=collection.find_one({})
print(x,'\n')


# 查询所有数据
rows = collection.find()
for row in rows:
    print(row)

print('\n')
# collection.find({'字段名': {'基本符号': 边界值, '基本符号': 边界值}})

# 符号        含义          示例
# $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]}}

# 还可以进行正则匹配查询。例如,查询名字以M开头的学生数据,示例如下:
# results = collection.find({'name': {'$regex': '^M.*'}})
#
# 符号        含义                  示例                                                      示例含义
# $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'}       自身粉丝数等于关注数


rows = collection.find({'age':{'$lt':25,'$gt':21},
                        'name':{'$ne':'公孙小八'}})
for row in rows:
    print(row)

# 查询并对结果进行计数(更新到 4.0 版本,删除了 Cursor 类里的 count 方法)
# print(collection.find().count())


rows = collection.find().sort('age', 1) #其中方向为1表示升序,方向为**-1**表示降序
for row in rows:
    print(row)

# 更新一条
collection.update_one(
    {'name': '赵小三'},
    {'$set': {'address': '美国','age':60}})

# 更新所有
collection.update_many(
    {'name': '公孙小八'},
    {'$set': {'address': '英国','age':80}})

print('\n')
rows = collection.find().sort('age', 1).limit(5) #用limit()方法指定要取的结果个数
for row in rows:
    print(row)

# 删除第一个满足条件的数据
collection.delete_one({'age': 0})
# 删除所有满足条件的数据
collection.delete_many({'age': 0})```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • Windows安装docker 打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V...
    薥劃阅读 291评论 0 0
  • NoSQL-MongoDB运维技术 # NoSQL-MongoDB 运维 # 第一章:MySQL 到 MongoD...
    StandingBy_abc阅读 219评论 0 0
  • # MongoDB ## 数据库分类 ### 关系型数据库 * 具备ACID特性 * Atomic原子性,也就...
    奥利奥_4e9e阅读 581评论 0 0
  • 官网下载mongondbhttps://www.mongodb.com根据系统选择相应版本。(这里是3.6,最新的...
    xyzcmu阅读 644评论 0 0
  • 遇到开发组的同事在本地安装mongodb.遇到各种问题,我就在本地局域网113上安装了docker版的mongod...
    GisonWin010阅读 133评论 0 0