MongoDB 教程、高级教程:https://www.runoob.com/mongodb/mongodb-tutorial.html

官网:https://www.mongodb.com/

Pymongo 多线程安全。多进程不保证安全

Pymongo 多线程是安全的。多进程不保证是安全的。如果想要 多进程 同时写入同一个 collection中,需要在每个进程中创建自己的MongoClient对象。

官方文档:Frequently Asked Questions — PyMongo 3.12.1 documentation

简单封装

# -*- coding: utf-8 -*-import json
import pymongoconfig_dict = {'redis': {'host': '','port': '','db': '',},'mongodb': {'host': '127.0.0.1','port': 27017,'username': 'test','password': 'test','auth_db': 'admin'}
}class MongoDBOperate(object):def __init__(self, host=None, port=None, username=None, password=None, auth_db=None):super(MongoDBOperate, self).__init__()self.mongodb_host = hostself.mongodb_port = portself.mongodb_username = usernameself.mongodb_password = passwordself.auth_db = auth_dbself.__client = pymongo.MongoClient(host=self.mongodb_host, port=self.mongodb_port)# self.mongodb = self.__client.get_database('admin')self.mongodb_db = self.__client.get_database(self.auth_db)self.mongodb_db.authenticate(name=self.mongodb_username, password=self.mongodb_password)def __del__(self):"""析构函数,释放资源或者关闭连接:return:"""self.__client.close()passdef insert_one_or_many(self, db_name=None, tb_name=None, data=None):"""插入一条:param db_name:   数据库名:param tb_name:   集合名(表名):param data:      插入的数据(文档): dict 类型 或者 list 类型"""if db_name and tb_name and data:mongodb_tb = self.__client.get_database(db_name).get_collection(tb_name)# insert 时如存在会报错,可以使用 save 方法: self.__get_conn(db_name, tb_name).save(item)# self.__client.get_database(db_name).get_collection(tb_name).insert_one(item)func_write = mongodb_tb.insert_many if isinstance(data, list) else mongodb_tb.savefunc_write(data)else:raise Exception('db_name or tb_name is None')def find_one_or_many(self, db_name=None, tb_name=None, query_condition=None, field_list: list = None,query_one=False):""":param db_name: 数据库名:param tb_name: 数据表名:param query_condition: 查询条件:param field_list: 要查询的字段列表:param query_one: 是否只查询一条数据:return:"""if db_name and tb_name:mongodb_tb = self.__client.get_database(db_name).get_collection(tb_name)if query_condition:func_find = mongodb_tb.find_one if query_one else mongodb_tb.findquery_field = {field: 1 for field in field_list} if field_list else Noneresult_list = func_find(query_condition, query_field) if field_list else func_find(query_condition)else:# 没有查询条件,默认返回所有query_field = {field: 1 for field in field_list} if field_list else Noneresult_list = mongodb_tb.find({}, query_field) if field_list else mongodb_tb.find()for result in result_list:yield resultelse:raise Exception('db_name or tb_name is None')def update_one_or_many(self, db_name=None, tb_name=None, update_condition=None, update_one=True, update_id=None, ):"""Update a single document matching the filter ( update_condition ):param db_name::param tb_name::param update_condition:  filter 条件:param update_one::param update_id: 根据 _id 进行更新:return:"""if db_name and tb_name and update_condition:mongodb_tb = self.__client.get_database(db_name).get_collection(tb_name)if update_id:result = mongodb_tb.update_one({'_id': update_id}, update_condition)return resultfunc_update = mongodb_tb.update_one if update_one else mongodb_tb.update_manyresult = func_update(update_condition)else:raise Exception('db_name or tb_name or update_condition is None')return resultdef remove_one_or_many(self, db_name=None, tb_name=None, remove_condition=None, remove_one=True):if db_name and tb_name and remove_condition:mongodb_tb = self.__client.get_database(db_name).get_collection(tb_name)# remove_condition = { "name": "test_test" }func_delete = mongodb_tb.delete_one if remove_one else mongodb_tb.delete_manyfunc_delete(filter=remove_condition)else:raise Exception('db_name or tb_name or remove_condition is None')if __name__ == '__main__':pass

Python 连接 MongoDB 集群

Python 连接 MongoDB 的驱动为 pymongo, 基于 pymongo 有封装的 mongoengine,以及基于mongoengine 的 flask_mongoengie。

方法 1:使用 pymongo 连接 MongoDB 集群

示例代码:

from pymongo import MongoClient, ReadPreferencedef db_conn():client = MongoClient(['192.168.2.188:20000', '192.168.2.190:20000', '192.168.2.191:20000'])db_auth = client.admindb_auth.authenticate('lty', 'lty@100729')db = client.get_database('kafka_test', read_preference=ReadPreference.SECONDARY_PREFERRED)collection = db.ITS_Topic_CommandACKfor x in collection.find():print(x)if __name__ == '__main__':db_conn()pass

说明:

  1. 创建 client 客户端,通常写法为 MongoClient("mongo://host:port"),由于此处是连接集群,所以书写方式有所不同;
  2. 第二、第三行为登录;
  3. 获取数据库,通常写法为 client['db'],其中 db 为数据库名称,此处采用 get_database 方法,也只是写法不同;
  4. 获取集合,使用方法 db['collection'],其中 collection 为集群的名称,另外就是使用上面示例中的方法,直接带上集群名称即可,上面示例中 ITS_Topic_CommandACK 为集群的名称;
  5. 之后就可以进行增删改查了,上面示例中为轮询所有的数据;

示例代码 2:

建立了一个MongoDB集群,集群名称 replSet=rs0,包含以下 3 个节点:

172.16.250.233:27017 # SECONDARY
172.16.250.234:27017 # PRIMARY
172.16.250.237:27017 # SECONDARY

集群的 test 用户的密码为 “123456” ,只能访问 test 数据库。另外还有一个 MongoDB 数据库单独部署在 172.16.250.238,其 admin 用户的密码为 “123456” ,只能访问 admin 数据库。MongoDB 集群没有提供类似MySQL集群和Redis集群中的虚拟IP。在使用的时候需要客户端连接时指定MongoDB 集群的所有节点。

# coding=utf-8from pymongo import MongoClient# ################################ single mongo ##########################################
# ret : ['admin', 'config', 'local']
c = MongoClient(host="172.16.250.238", port=27017)
# c = MongoClient(host="mongodb://172.16.250.238:27017")
# c = MongoClient(host="mongodb://admin:123456@172.16.250.238:27017")
# c = MongoClient(host="mongodb://admin:123456@172.16.250.238:27017/admin")# ################################ mongo cluster ##########################################
# ret : ['test']
mongodb_cluster_ip = '172.16.250.233:27017,172.16.250.234:27017,172.16.250.237:27017'
c = MongoClient(f'mongodb://test:123456@{mongodb_cluster_ip}/test')
# c = MongoClient(f'mongodb://test:123456@{mongodb_cluster_ip}/test?replicaSet=rs0')
# c = MongoClient(f'mongodb://test:123456@{mongodb_cluster_ip}/test?readPreference=secondary')print(c.list_database_names())

方法 2:使用 mongoengine 连接 MongoDB 集群

示例代码:

# coding=utf-8from mongoengine import connect
from mongoengine import Document
from mongoengine import StringField# single mongo
connect('admin', host='mongodb://admin:123456@172.16.250.238:27017')# mongo cluster
cluster_ip = '172.16.250.233:27017,172.16.250.234:27017,172.16.250.237:27017'
# connect('test', host=f'mongodb://test:123456@{cluster_ip}/test?readPreference=secondary')class User(Document):  # 类名需要与数据库中的集合名称一致name = StringField(required=True, max_length=200)users = User.objects.all()  # 返回所有的文档对象列表for u in users:print("name:", u.name)
pass

方法 3:使用 flask_mongoengine 连接 MongoDB 集群

示例代码:

# coding=utf-8
from flask_mongoengine import MongoEngine
from flask import Flaskapp = Flask(__name__)# app.config['MONGODB_SETTINGS'] = {
#         'host': 'mongodb://admin:123456@172.16.250.238:27017/admin',
#         }# app.config.from_pyfile('mongo.cfg')# app.config['MONGODB_SETTINGS'] = {
#        'db': 'admin',
#        'username': 'admin',
#        'password': '123456',
#        'host': '172.16.250.238',
#        'port': 27017
#        }app.config['MONGODB_SETTINGS'] = [{'db': 'test','username': 'test','password': '123456','host': '172.16.250.233','port': 27017},{'db': 'test','username': 'test','password': '123456','host': '172.16.250.234','port': 27017}, {'db': 'test','username': 'test','password': '123456','host': '172.16.250.237','port': 27017}
]db = MongoEngine(app)class User(db.Document):name = db.StringField(required=True, max_length=50)users = User.objects.all()  # 返回所有的文档对象列表for u in users:print("name:", u.name)

配置文件 mongo.cfg 格式如下:

MONGODB_SETTINGS = {'host': 'mongodb://admin:123456@172.16.250.238:27017/admin',
}

Python 操作 mongodb

首先引入包:pip install pymongo

需要用到如下对象:MongoClient 对象:用于与 MongoDB服务器建立连接client = MongoClient('主机ip',端口)DataBase 对象:对应着MongoDB中的数据库db = client.数据库名称Collection 对象:对应着MongoDB中的集合col = db.集合名称Cursor 对象:查询方法find()返回的对象,用于进行多行数据的遍历当调用集合对象的find()方法时,会返回Cursor对象结合for...in...遍历cursor对象主要方法:insert_one:   加入一条文档对象insert_many:加入多条文档对象find_one:     查找一条文档对象find:            查找多条文档对象update_one:   更新一条文档对象update_many:更新多条文档对象delete_one:   删除一条文档对象delete_many:删除多条文档对象插入方法:insert_one()     :传入一个字典,表示插入一个文档insert_many()  :传入一个列表,列表的元素为字典,插入多条文档

mongodb 的条件操作符

#    (>)    大于     - $gt
#    (<)    小于     - $lt
#    (>=)   大于等于 - $gte
#    (<= )  小于等于 - $lte# 例:查询集合中 age 大于 25 的所有记录
for i in my_set.find({"age":{"$gt":25}}):print(i)type(判断类型)# 类型队对照列表
# Double    1
# String    2
# Object    3
# Array    4
# Binary data    5
# Undefined    6    已废弃
# Object id    7
# Boolean    8
# Date    9
# Null    10
# Regular Expression    11
# JavaScript    13
# Symbol    14
# JavaScript (with scope)    15
# 32-bit integer    16
# Timestamp    17
# 64-bit integer    18
# Min key    255    Query with -1.
# Max key    127     # 找出 name 的类型是 String 的
for i in my_set.find({'name':{'$type':2}}):print(i)排序:在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,使用 1 和 -1 来指定排序的方式,其中 1 为升序,-1为降序。for i in my_set.find().sort([("age",1)]):print(i)limit 和 skip# limit()方法用来读取指定数量的数据
# skip()方法用来跳过指定数量的数据
# 下面表示跳过两条数据后读取6条
for i in my_set.find().skip(2).limit(6):print(i)IN 操作
# 找出 age 是 20、30、35 的数据
for i in my_set.find({"age":{"$in":(20,30,35)}}):print(i)OR 操作
#找出age是20或35的记录
for i in my_set.find({"$or":[{"age":20},{"age":35}]}):print(i)all 操作
'''
dic = {"name":"lisi","age":18,"li":[1,2,3]}
dic2 = {"name":"zhangsan","age":18,"li":[1,2,3,4,5,6]}my_set.insert(dic)
my_set.insert(dic2)'''
for i in my_set.find({'li':{'$all':[1,2,3,4]}}):print(i)# 查看是否包含全部条件
# 输出:{'_id': ObjectId('58c503b94fc9d44624f7b108'), 'name': 'zhangsan', 'age': 18, 'li': [1, 2, 3, 4, 5, 6]}push / pushAllmy_set.update({'name':"lisi"}, {'$push':{'li':4}})
for i in my_set.find({'name':"lisi"}):print(i)
# 输出:{'li': [1, 2, 3, 4], '_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'age': 18, 'name': 'lisi'}my_set.update({'name':"lisi"}, {'$pushAll':{'li':[4,5]}})
for i in my_set.find({'name':"lisi"}):print(i)
# 输出:{'li': [1, 2, 3, 4, 4, 5], 'name': 'lisi', 'age': 18, '_id': ObjectId('58c50d784fc9d44ad8f2e803')}pop/pull/pullAll# pop
# 移除最后一个元素(-1为移除第一个)
my_set.update({'name':"lisi"}, {'$pop':{'li':1}})
for i in my_set.find({'name':"lisi"}):print(i)
# 输出:{'_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'age': 18, 'name': 'lisi', 'li': [1, 2, 3, 4, 4]}# pull (按值移除)
# 移除3
my_set.update({'name':"lisi"}, {'$pop':{'li':3}})# pullAll (移除全部符合条件的)
my_set.update({'name':"lisi"}, {'$pullAll':{'li':[1,2,3]}})
for i in my_set.find({'name':"lisi"}):print(i)
# 输出:{'name': 'lisi', '_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'li': [4, 4], 'age': 18}

插入:

insert()       insert 插入一个列表多条数据不用遍历,效率高
insert_one()   传入一个字典,表示插入一个文档
insert_many()  传入一个列表,列表的元素为字典,插入多条文档save()         save 需要遍历列表,一个个插入。save 插入数据时,没有则插入,有则覆盖replace_one()  save 已经被废弃. 使用 insert_one 或者 replace_one 代替 savedb.collection.replaceOne(<filter>,         # 过滤的条件<replacement>,    # 替换的 document{upsert: <boolean>,    # 当 upsert 为 true 时:如果没有匹配的则插入。如果有匹配的则替换。writeConcern: <document>}
)db.restaurant.replaceOne({name:"Pizza Rat's Pizzaria"},{"_id":4, name" : "Pizza Rat's Pizzaria", "Borough" : "Manhattan", "violations" : 8 },{upsert:true}
)

示例代码:

from pymongo import *
'''
插入方法:insert_one() 传入一个字典,表示插入一个文档insert_many() 传入一个列表,列表的元素为字典,插入多条文档
'''
def insert():try:# 1 创建连接对象client = MongoClient(host="localhost", port=27017)# 2 获取数据库,# 如果这个数据库不存在,就在内存中虚拟创建# 当在库里创建集合的时候,就会在物理真实创建这个数据库db = client.demo    # 使用 demo 数据库# 向 stu 集合插入数据# 插入一条db.stu.insert_one({"name": "zs", "age": 20})# 插入多条db.stu.insert_many([{"name": 1}, {"name": 2}])except Exception as e:print(e)if __name__ == '__main__':insert()

示例 2:

from pymongo import MongoClientdb = MongoClient(host='127.0.0.1', port=27017)
my_set = db.get_database('test').get_collection('test')
my_set.insert({"name": "king", "age": 18})
# 或
my_set.save({"name": "king", "age": 18})# 插入多条
# 添加多条数据到集合中
users = [{"name": "king", "age": 18}, {"name": "lisi", "age": 20}
]
my_set.insert(users)
# 或
my_set.save(users)

查询:

  • find_one():返回满足条件的文档集中第一条数据,类型为字典。如果没有查询结果返回None。
  • find():返回满足条件的所有文档,类型为Cursor对象,可以使用 for...in 遍历,每项为字典对象。如果没有查询结果返一个空的Cursor对象。

db = pymongo.MongoClient()
db.get_database(db_name).get_collection(tb_name).find({}, {'_id': 1})
db[db_name][tb_name].find({'v_tag': {'$exists': False}},{'_id':1})
db[db_name][tb_name].find({'likes':0,'archive_view':0,'article_view':0})

示例代码:

from pymongo import *
'''
查询方法:find_one()返回满足条件的文档集中第一条数据,类型为字典如果没有查询结果返回None方法find()返回满足条件的所有文档,类型为Cursor对象,可以使用for...in遍历,每项为字典对象如果没有查询结果返一个空的Cursor对象
'''
def select():try:# 1 创建连接对象client = MongoClient(host="localhost", port=27017)# 2 获取数据库,# 如果这个数据库不存在,就在内存中虚拟创建# 当在库里创建集合的时候,就会在物理真实创建这个数据库db = client.demo    # 使用demo数据库# 从stu查询数据# 查询一条,返回一个字典,如果没有结果返回Noneres = db.stu.find_one({"age": 18})print(res)# 查询全部结果,返回一个Cursor可迭代对象,每一个元素是字典# 如果没有查询结果会返回一个空的Cursor对象res = db.stu.find({"age": {"$gt": 18}})print(res)except Exception as e:print(e)if __name__ == '__main__':select()

示例 2:

from pymongo import MongoClientdb = MongoClient(host='127.0.0.1', port=27017)
my_set = db.get_database('test').get_collection('test')# 查询全部
for i in my_set.find():print(i)# 查询 name=king 的
for i in my_set.find({"name": "king"}):print(i)
print(my_set.find_one({"name": "king"}))

更新:

    update_one()    :修改满足条件的文档集中的第一条文档update_many()   :修改满足条件的文档集中的所有文档注意:使用 $set 操作符修改特定属性的值,否则会修改整个文档my_set.update(<query>,     # 查询条件<update>,    # update 的对象和一些更新的操作符{upsert: <boolean>,          # 如果不存在update的记录,是否插入multi: <boolean>,           # 可选,mongodb 默认是 false, 只更新找到的第一条记录writeConcern: <document>    # 可选,抛出异常的级别。}
)

示例代码:

from pymongo import *
'''
修改方法:update_one()修改满足条件的文档集中的第一条文档update_many()修改满足条件的文档集中的所有文档注意:使用$set操作符修改特定属性的值,否则会修改整个文档
'''
def update():try:# 1 创建连接对象client = MongoClient(host="localhost", port=27017)# 2 获取数据库,# 如果这个数据库不存在,就在内存中虚拟创建# 当在库里创建集合的时候,就会在物理真实创建这个数据库db = client.demo    # 使用demo数据库# 修改数据# 修改第一条符合条件的数据,传入条件和修改结果db.stu.update_one({"age": 18},{"$set": {"age": 100}})  # 把年龄是18的第一条年龄改成100# 所有符合条件数据都修改# db.stu.update_many({"age": 18},{"$set": {"age": 100}}) # 年龄18的所有数据年龄改成100except Exception as e:print(e)if __name__ == '__main__':update()

示例 2:

from pymongo import MongoClientdb = MongoClient(host='127.0.0.1', port=27017)
my_set = db.get_database('test').get_collection('test')# 把上面插入数据的 age 改为 20
my_set.update({"name": "king"}, {'$set': {"age": 20}}
)

update_condition = {'$set': {'v_tag': 'test', 'v_stat': 'test'}}
update_one({'_id': v_id}, update_condition)

删除:

    delete_one()    :删除满足条件的文档集中第一条文档delete_many() :删除满足条件的所有文档注意:使用 $set 操作符修改特定属性的值,否则会修改整个文档my_set.remove(<query>,     #(可选)删除的文档的条件{justOne: <boolean>,         #(可选)如果设为 true 或 1,则只删除一个文档writeConcern: <document>    #(可选)抛出异常的级别}
)

示例代码:

from pymongo import *
'''
删除方法:delete_one()删除满足条件的文档集中第一条文档delete_many()删除满足条件的所有文档注意:使用$set操作符修改特定属性的值,否则会修改整个文档
'''
def delete():try:# 1 创建连接对象client = MongoClient(host="localhost", port=27017)# 2 获取数据库,# 如果这个数据库不存在,就在内存中虚拟创建# 当在库里创建集合的时候,就会在物理真实创建这个数据库db = client.demo    # 使用demo数据库# 修改数据# 修改第一条符合条件的文档删除db.stu.delete_one({"age": 18})  # 把年龄是18的第一条文档删除# 所有符合条件数据都删除db.stu.delete_many({"age": 18}) # 年龄18的所有文档删除except Exception as e:print(e)if __name__ == '__main__':delete()

示例 2:

from pymongo import MongoClientdb = MongoClient(host='127.0.0.1', port=27017)
my_set = db.get_database('test').get_collection('test')# 删除 name=king 的全部记录
my_set.remove({'name': 'king'})# 删除name=king的某个id的记录
t_id = my_set.find_one({"name":"king"})["_id"]
my_set.remove(t_id)# 删除集合里的所有记录
db.users.remove()

案例:
        使用 python 向集合 t3 中插入1000 条文档,文档的属性包括 _id、name
        _id 的值为 0、1、2、3...999。name 的值为 'py0'、'py1'...
        查询显示出 _id 为 100 的整倍数的文档,如 100、200、300...,并将 name 输出

示例代码:

import pymongo
if __name__ == '__main__':try:# 1 获得连接对象client = pymongo.MongoClient(host="localhost", port=27017)# 2 获取数据库db = client.demo# 3 执行业务逻辑 数据库操作# 插入1000条数据for id in range(0,1000):db.t3.insert_one({"_id": id, "name": "py%s"% id})# 取出符合条件的数据match = {"$where": "function(){return this._id%100 == 0 }",}res = db.t3.find(match, {"_id": 0, "name": 1})for info in res:print(info)except Exception as e:print(e)

示例代码:

import pymongo
from pymongo import MongoClientclient = MongoClient('localhost',27017)
#client = MongoClient('mongodb://localhost:27017')# 访问数据库。当前所使用的数据库test的users
db = client.test
users = db.users
#或者db = client['users']# 插入文档。文档就是一行,集合就是一个表。
# 一个insert_one()
user1 = {"name":"li8","age":8}
rs = users.insert_one(user1)
print('one insert:{0}'.format(rs.inserted_id))# 多个 insert_many()
user2 = {"name":"li9","age":9}
user3 = {"name":"li10","age":10}
user4 = {"name":"li11","age":11}
user5 = {"name":"li12","age":12}
new_result = users.insert_many([user2, user3, user4, user5])
print('Multiple users: {0}'.format(new_result.inserted_ids))# 检索文档
# find_one() 查询一个结果。
usertmp = users.find_one({"age":33})
print(usertmp)# find() 查询多个结果。
result = users.find({'age': 33})
for tmp in result:print(tmp)# 高级查询
result = users.find({'age':{"$lt":30}}).sort("name")
for tmp in result:print(tmp)# 统计数量
print(users.count())# 加索引
from pymongo import ASCENDING, DESCENDING
print(users.create_index([("age", DESCENDING), ("name", ASCENDING)]))# 数据导出
mongoexport -d test -c users --csv -f name,age  -o e:\python\users.csv

多级 路径 元素操作

先插入一条数据
dic = {"name": "zhangsan","age": 18,"contact": {"email": "1234567@qq.com","iphone": "11223344"}
}
my_set.insert(dic)# 多级目录用 "." 连接
for i in my_set.find({"contact.iphone":"11223344"}):print(i)
# 输出:{'name': 'zhangsan', '_id': ObjectId('58c4f99c4fc9d42e0022c3b6'), 'age': 18, 'contact': {'email': '1234567@qq.com', 'iphone': '11223344'}}result = my_set.find_one({"contact.iphone":"11223344"})
print(result["contact"]["email"])
# 输出:1234567@qq.com# 多级路径下修改操作
result = my_set.update({"contact.iphone":"11223344"},{"$set":{"contact.email":"9999999@qq.com"}})
result1 = my_set.find_one({"contact.iphone":"11223344"})
print(result1["contact"]["email"])
# 输出:9999999@qq.com还可以对数组用索引操作
dic = {"name": "lisi","age": 18,"contact": [{"email": "111111@qq.com", "iphone": "111"},{"email": "222222@qq.com", "iphone": "222"}]
}
my_set.insert(dic)# 查询
result1 = my_set.find_one({"contact.1.iphone":"222"})
print(result1)
# 输出:{'age': 18, '_id': ObjectId('58c4ff574fc9d43844423db2'), 'name': 'lisi', 'contact': [{'iphone': '111', 'email': '111111@qq.com'}, {'iphone': '222', 'email': '222222@qq.com'}]}# 修改
result = my_set.update({"contact.1.iphone":"222"},{"$set":{"contact.1.email":"222222@qq.com"}})
print(result1["contact"][1]["email"])
# 输出:222222@qq.com

示例代码 :

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from pymongo import MongoClientsettings = {"ip":'192.168.0.113',     # ip"port":27017,             # 端口"db_name" : "mydb",       # 数据库名字"set_name" : "test_set"   # 集合名字
}class MyMongoDB(object):def __init__(self):try:self.conn = MongoClient(settings["ip"], settings["port"])except Exception as e:print(e)self.db = self.conn[settings["db_name"]]self.my_set = self.db[settings["set_name"]]def insert(self,dic):print("inser...")self.my_set.insert(dic)def update(self,dic,newdic):print("update...")self.my_set.update(dic,newdic)def delete(self,dic):print("delete...")self.my_set.remove(dic)def db_find(self,dic):print("find...")data = self.my_set.find(dic)for result in data:print(result["name"],result["age"])def main():dic={"name":"zhangsan","age":18}mongo = MyMongoDB()mongo.insert(dic)mongo.db_find({"name":"zhangsan"})mongo.update({"name":"zhangsan"}, {"$set":{"age":"25"}})mongo.db_find({"name":"zhangsan"})mongo.delete({"name":"zhangsan"})mongo.db_find({"name":"zhangsan"})if __name__ == "__main__":main()

示例代码 :

# encoding:utf=8
import pymongoconnection = pymongo.Connection('127.0.0.1', 27017)db = connection.my_db   # 选择 my_db 库
tb = db.my_set          # 使用 my_set 集合# 添加单条数据到集合中
user = {"name": "king", "age": "23"}
tb.insert(user)  # 添加数据
tb.save(user)   # 添加数据# 同时添加多条数据到集合中
users = [{"name": "king_1", "age": "23"},{"name": "king_2", "age": "20"}
]
tb.insert(users)  # 添加数据
tb.save(users)  # 添加数据# 删除命令如下:
tb.remove({"name": "king_1"})# 修改命令如下:
# tb.update(xxxx)# 查询命令如下:
# 查询单条记录
print(tb.find_one())# 查询所有记录
for data in tb.find():print(data)# 查询此集合中数据条数
print(tb.count())# 简单参数查询
for data in tb.find({"name": "1"}):print(data)# 使用find_one获取一条记录
print(tb.find_one({"name": "1"}))

示例代码 :

# -*-coding:utf8-*-
import pymongoconn = pymongo.MongoClient()
tdb = conn.t_db
ttb = tdb.t_tbdata_1 = {'name': '孙悟空', 'age': 108000, 'skill': '让你们被猴打过'}
data_2 = {'name': '玉皇大帝', 'age': 36000, 'skill': 'creat anything', 'other': 'fuck thank you'}
data_3 = {'name': '如来', 'age': 'unknown', 'other': '送你上西天'}
ttb.insert(data_1)
ttb.insert(data_2)
ttb.insert(data_3)
ttb.remove({'name': '孙悟空'})
print('操作数据库完成!')

Python 操作 MongoDB相关推荐

  1. Python 操作 MongoDB 数据库!

    作者 |黄伟呢 来源 |数据分析与统计学之美 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 先来看看MySQL与MongoDB 概念区别 ...

  2. python操作mongodb进行读写

    python操作mongodb 安装mongodb的Python库 python3 -m pip install pymongo 测试连接: import pymongo #myclient = py ...

  3. python 读取mongodb,python操作MongoDB

    python操作mongodb 连接mongodb #!/usr/bin/env python # -*- coding:utf-8 -*- from pymongo import MongoClie ...

  4. mongodb python 大于_5、Python操作MongoDB

    Mongodb MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨在为WEB应用提供可扩展的高性能 ...

  5. MongoDB - 使用Python操作MongoDB

    使用Python操作MongoDB数据库 CSDN:jcLee95 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.net/qq_28550263?sp ...

  6. 使用Python操作MongoDB

    微信公众号:运维开发故事,作者:double冬 通常在项目中,一般都需要一种编程语言来操作数据库,使用Python来操作数据库有着天然的优势,因为Python的字典和MongoDB的文档几乎是一样的格 ...

  7. MongoDB的安装到使用 + Python操作MongoDB + 有关系和无关系数据库比较

    day1 - day7 mongoDB学习第一天 数据库 MongoDB (芒果数据库) 数据存储阶段 文件管理阶段 (.txt .doc .xls) 优点 : 数据可以长期保存 可以存储大量的数据 ...

  8. java连接mongodb_第78天: Python 操作 MongoDB 数据库介绍

    MongoDB 是一款面向文档型的 NoSQL 数据库,是一个基于分布式文件存储的开源的非关系型数据库系统,其内容是以 K/V 形式存储,结构不固定,它的字段值可以包含其他文档.数组和文档数组等.其采 ...

  9. Python操作MongoDB - 极简教程

    2019独角兽企业重金招聘Python工程师标准>>> Python 连接 MongoDB 安装PyMongo模块 pip install pymongo 使用MongoClient ...

最新文章

  1. eclipse常用插件介绍
  2. Bzoj3730 震波
  3. 代码荣辱观-以运用风格为荣,以随意编码为耻
  4. hdu3986 spfa + 枚举最短路上的边
  5. jodd-StringTemplateParser使用
  6. 设计模式 | 适配器模式及典型应用
  7. mysql cluster 查看最大索引数_MySQL 数据库优化,看这篇就够了
  8. [Java基础]类加载
  9. 一句代码实现gzip压缩解压缩
  10. 关于Android工程师转成vue的三两事儿(4)--webpack
  11. 软路由的介绍及安装和配置
  12. CSS实现优惠券特殊样式的技巧
  13. 大学计算机专业和高中知识挂钩吗,北大试水高中生选修的大学课程与自主招生挂钩...
  14. [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植
  15. 计算机系统安全期末复习
  16. android 采集音频输出,Android系统分析之Audio音频流, 音频策略, 输出设备之间的关系...
  17. 企查查爬虫循环获取信息
  18. lsdyna如何设置set中的node_list_Redis 系列教程(二)Redis中的五种数据类型
  19. 计算机网络期末复习提纲,湖南科技大学《计算机网络微课堂》课题笔记
  20. 匡威react是什么意思_react+zoom?这双牛掰的匡威似乎不如李宁?

热门文章

  1. OpenTSDB 造成 Hbase 整点压力过大问题的排查和解决
  2. 自然场景人脸检测技术实践
  3. 一种单独适配于NER的数据增强方法:DAGA
  4. 机器学习的重新思考:人工智能如何学习“失忆”?
  5. Java面试题:IO流的标准处理异常的代码
  6. [NOI2013]树的计数
  7. DVA框架统一处理所有页面的loading状态
  8. swift inheritace 继承
  9. WebClient 上传文件
  10. asp.net(C#)写SQL语句技巧