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})```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

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