浅析Python与Mongodb数据库之间的操作方法

MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。

1. 安装Mongodb和pymongo

Mongodb的安装和配置

Mongodb的安装教程请网上搜索, 安装完成后,    进行以下配置过程:

1.1 创建目录, 该目录为Mongodb数据文件的存放目录:

*注: 本人使用的不是root用户, 所以修改目录的拥有者. *

sudo mkdir /data
sudo chown -R python:python /data
mkdir /data/db

1.2 分别执行命令:

第一条命令为指定端口和保存路径, 第二条为运行mongodb数据库.

mongod --port 27017 --dbpath /data/db
mongo --port 27017

1.3 安装pymongo

sudo pip3 install pymongo

2. 连接数据库、指定数据库、指定集合、插入数据:

mongodb存储数据以键值形式, 因此在Python中使用字段插入数据.

import pymongo
#连接mongodb
client = pymongo.MongoClient('mongodb://localhost:27017/')
#指定数据库
db = client.test4
#指定集合
collection = db.students
#数据
student1 = {
 'id': '201801',
 'name': 'Jack',
 'age': 20,
 'gender': 'male'
}
student2 = {
 'id': '201802',
 'name': 'Tom',
 'age': 22,
 'gender': 'male'
}
student3 = {
 'id': '201803',
 'name': 'Rose',
 'age': 21,
 'gender': 'female'
}
student4 = {
 'id': '201804',
 'name': 'Mike',
 'age': 20,
 'gender': 'female'
}
student5 = {
 'id': '201805',
 'name': 'Ray',
 'age': 20,
 'gender': 'female'
}
student6 = {
 'id': '201806',
 'name': 'Alan',
 'age': 21,
 'gender': 'male'
}
#插入一条数据
result1 = collection.insert_one(student1)
print(result1)
print(result1.inserted_id)
# #插入多条数据
result2 = collection.insert_many([student2, student3, student4, student5, student6])
print(result2)
print(result2.inserted_ids)

运行结果:

insert方法:

5b3a1942971951218d41c02b
[ObjectId('5b3a1942971951218d41c02c'), ObjectId('5b3a1942971951218d41c02d')]

官方推荐:

<pymongo.results.InsertOneResult object at 0x7fa4cc363ec8>
5b3a1942971951218d41c02e
<pymongo.results.InsertManyResult object at 0x7fa4cc363f08>
[ObjectId('5b3a1942971951218d41c02f'), ObjectId('5b3a1942971951218d41c030')]

3. 查询、计数、排序、偏移:

import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#查询一条数据
print('单条数据','='*50)
result = collection.find_one({'name': 'Jack'})
print(result)
print('多条数据','='*50)
#查询多条数据
for res in collection.find({'age': {'$mod': [5, 0]}}):
 print(res)
#计数
print('计数','='*50)
count = collection.find({'age': {'$mod': [5, 0]}}).count()
print(count)
#排序
print('排序','='*50)
results = collection.find().sort('name', pymongo.ASCENDING) #升序, pymongo.DESCENDING为降序
print([result['name'] for result in results])
#偏移
print('偏移','='*50)
results = collection.find().sort('name', pymongo.ASCENDING).skip(2) #偏移2位,忽略前两个数据
print([result['name'] for result in results])
results = collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2) #只输出2个数据
print([result['name'] for result in results])
find({‘age': {'$mod': [5, 0]}}): 表示查找年龄取余5余0的值. 还有很多比较符号, 请百度.

运行结果:

单条数据 ==================================================
{'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'}
多条数据 ==================================================
{'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('5b3a1942971951218d41c02e'), 'id': '201804', 'name': 'Mike', 'age': 20, 'gender': 'female'}
{'_id': ObjectId('5b3a1942971951218d41c02f'), 'id': '201805', 'name': 'Ray', 'age': 20, 'gender': 'female'}
计数 ==================================================
3
排序 ==================================================
['Alan', 'Jack', 'Mike', 'Ray', 'Rose', 'Tom']
偏移 ==================================================
['Mike', 'Ray', 'Rose', 'Tom']
['Mike', 'Ray']

4. 更新:

4.1  不使用$set更新数据:

import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#修改
condition = {'name': 'Jack'}
student = collection.find_one(condition) #获得满足condition的数据
print('更新前: ', student)
student['age'] = 22 #修改年龄
result = collection.update(condition, student) #将修改后的student替换condition
print('更新后', collection.find_one(condition))
#更新的返回值
print(result) #ok=1代表执行成功, nModified代表影响的条数

运行结果:

更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'}
更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 22, 'gender': 'male'}
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}

4.2  使用$set更新数据:

import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#使用$set更新
condition = {'name': 'Jack'}
student = collection.find_one(condition) #获得满足condition的数据
print('更新前: ', student)
student['age'] = 23 #修改年龄
result = collection.update(condition, {'$set': student}) #将修改后的student替换condition, $set为重点
print('更新后', collection.find_one(condition))
#更新的返回值
print(result) #ok=1代表执行成功, nModified代表影响的条数

运行结果:

更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 22, 'gender': 'male'}
更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 23, 'gender': 'male'}
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}

比较使用和不适用$set更新数据, 发现此时并没有什么区别.

下面介绍区别所在:

4.3  区别

import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#使用和不使用$set更新的区别
print('使用: ')
condition = {'name': 'Jack'}
student = collection.find_one(condition) #获得满足condition的数据
print('更新前: ', student)
student = {
 'id': '201803',
 'name': 'Jack',
 'age': 20,
 'gender': 'female',
 'mother': "Jack's mother"
}
result = collection.update(condition, {'$set': student}) #将修改后的student替换condition
print('更新后', collection.find_one(condition))
#更新的返回值
print(result) #ok=1代表执行成功, nModified代表影响的条数
#分割线
print()
print('='*20, '分割线', '='*20)
print()
print('不使用: ')
condition = {'name': 'Jack'}
student = collection.find_one(condition) #获得满足condition的数据
print('更新前: ', student)
student = {
 'id': '201803',
 'name': 'Jack',
 'age': 20,
 'gender': 'female',
 'father': "Jack's father"
}
result = collection.update(condition, student) #将修改后的student替换condition
print('更新后', collection.find_one(condition))
#更新的返回值
print(result) #ok=1代表执行成功, nModified代表影响的条数

运行结果:

使用:

更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 23, 'gender': 'male'}
更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'mother': "Jack's mother"}
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}

==================== 分割线 ====================

不使用:
更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'mother': "Jack's mother"}
更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'father': "Jack's father"}
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}

分析上面运行结果, 可以发现使用$set时, 若更新数据有原数据没有的字段, 则将该字段加到原数据上(上例为新增了mother字段), 而不会删除任何字段. 相反, 若不使用set时, 将从原数据中删除更新数据没有的字段, 再加上新增字段(上例为删除了mother字段, 新增了father字段. 也可以理解为将原数据完全替换为更新数据)

4.4  update_one和update_many的区别:

import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#官方推荐使用
#update_one和update_many的区别
print('update_one: ')
condition = {'age': {'$gt': 20}}
result = collection.update_one(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)
#分割线
print()
print('='*20, '分割线', '='*20)
print()
print('update_many: ')
condition = {'age': {'$gt': 20}}
result = collection.update_many(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)

运行结果:

update_one:
<pymongo.results.UpdateResult object at 0x7f6cace0f9c8>
1 1
==================== 分割线 ====================
update_many:
<pymongo.results.UpdateResult object at 0x7f6cace0fa88>
3 3
12345678910
{‘age': {'$gt': 20}}为查找年龄大于20的, {‘inc': {‘age': 1}}为将年龄+1

5. 删除:

import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#删除
result = collection.remove({'name': 'Jack'})
print(result)
#推荐使用
result = collection.delete_one({'age': {'$gt': 20}})
print(result.deleted_count)
result = collection.delete_many({'age': {'$gt': 20}})
print(result.deleted_count)

运行结果:

{'ok': 1, 'n': 1}
1
2

6. 其他

除了上述常用的之外, 还包括find_one_and_delete()查找后删除、find_one_and_replace()查找后替换, 有兴趣可以百度深入了解.

总结

以上所述是小编给大家介绍的Python与Mongodb数据库之间的操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • 在Python中使用mongoengine操作MongoDB教程

    最近重新拾起Django,但是Django并不支持mongodb,但是有一个模块mongoengine可以实现Django Model类似的封装.但是mongoengine的中文文档几乎没有,有的也是简短的几句介绍和使用.下面我就分享一下我在使用过程中所记录下的一些笔记,可能有点乱.大家可以参考一下. 安装mongoengine easy_install pymongo # 依赖库 easy_install mongoengine 基本使用 from mongoengine import * f

  • python连接mongodb操作数据示例(mongodb数据库配置类)

    一.相关代码数据库配置类 MongoDBConn.py 复制代码 代码如下: #encoding=utf-8''' Mongo Conn连接类''' import pymongo class DBConn:    conn = None    servers = "mongodb://localhost:27017" def connect(self):        self.conn = pymongo.Connection(self.servers) def close(self

  • Python操作MongoDB数据库PyMongo库使用方法

    引用PyMongo 复制代码 代码如下: >>> import pymongo 创建连接Connection 复制代码 代码如下: >>> import pymongo >>> conn = pymongo.Connection('localhost',27017) 或 复制代码 代码如下: >>> from pymongo import Connection >>> conn = Connection('local

  • 详解Python3操作Mongodb简明易懂教程

    连接数据库 链接数据库需要提供一个地址和接口即可.首先还是要导入包. from pymongo import MongoClient conn = MongoClient('localhost',27017) 当然,你可以使用如下写法: conn = MongoClient('mongodb://localhost:27017/') 创建数据库 mongodb不需要提前创建好数据库,而是直接使用,如果发现没有则自动创建. db = conn.testdb 上面的语句,会创建一个testdb的数据

  • 使用Python脚本操作MongoDB的教程

    连接数据库 MongoClient VS Connection class MongoClient(pymongo.common.BaseObject) | Connection to MongoDB. | | Method resolution order: | MongoClient | pymongo.common.BaseObject | __builtin__.object | class Connection(pymongo.mongo_client.MongoClient) | C

  • Python的MongoDB模块PyMongo操作方法集锦

    开始之前当然要导入模块啦: >>> import pymongo 下一步,必须本地mongodb服务器的安装和启动已经完成,才能继续下去. 建立于MongoClient 的连接: client = MongoClient('localhost', 27017) # 或者 client = MongoClient('mongodb://localhost:27017/') 得到数据库: >>> db = client.test_database # 或者 >>

  • Python中的MongoDB基本操作:连接、查询实例

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案.它的特点是高性能.易部署.易使用,存储数据非常方便. MongoDB 简单使用 联接数据库 复制代码 代码如下: In [1]: import pymongo In [2]: from pymongo import Connection In [3]: connection = Connection('192.168.1.3', 27017) //创建联接 Connection

  • python操作mongodb根据_id查询数据的实现方法

    本文实例讲述了python操作mongodb根据_id查询数据的实现方法.分享给大家供大家参考.具体分析如下: _id是mongodb自动生成的id,其类型为ObjectId,所以如果需要在python中通过_id查询,就需要转换类型 如果pymongo的版本号小于2.2,使用下面的语句导入ObjectId from pymongo.objectid import ObjectId 如果pymongo的版本号大于2.2,则使用下面的语句 from bson.objectid import Obj

  • 浅析Python与Mongodb数据库之间的操作方法

    MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). 1. 安装Mongodb和pymongo Mongodb的安装和配置 Mongodb的安装教程请网上搜索, 安装完成后,    进行以下配置过程: 1.1 创建目录, 该目录为Mongodb数据文件的存放目录: *注: 本人使用的不是root用户, 所以修改目录的拥有者. * sudo mkdir /data sudo chown -R python:python /data mkdir /da

  • Python常见MongoDB数据库操作实例总结

    本文实例讲述了Python常见MongoDB数据库操作.分享给大家供大家参考,具体如下: MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可

  • MongoDB数据库文档操作方法(必看篇)

    前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 如果数据库中不存在集合,则MongoDB将创建此集合,然后将文档插入到该集合中 要在单个查询中插入多个文档,可以在insert()命令中传递文档数组 可以使用js语法,插入多个文档 [save()] 插入文档也可以使用db.post.save(document). 如果不在文档中指定_id,那么save()方法将与insert()方法一样自动分配ID的值.如果指定_id,则将以save()方法的形式替换包含_id的文档的全部数据.

  • Python操作MongoDB数据库的方法示例

    本文实例讲述了Python操作MongoDB数据库的方法.分享给大家供大家参考,具体如下: >>> import pymongo >>> client=pymongo.MongoClient ('localhost',27017) >>> db=client.students >>> db.collection_names() ['students'] >>> students=db.students >>

  • Python操作Mongodb数据库的方法小结

    本文实例讲述了Python操作Mongodb数据库的方法.分享给大家供大家参考,具体如下: 一 导入 pymongo from pymongo import MongoClient 二 连接服务器 端口号 27017 连接MongoDB 连接MongoDB我们需要使用PyMongo库里面的MongoClient,一般来说传入MongoDB的IP及端口即可,第一个参数为地址host,第二个参数为端口port,端口如果不传默认是27017. conn = MongoClient("localhost

  • Python操作mongodb数据库的方法详解

    本文实例讲述了Python操作mongodb数据库的方法.分享给大家供大家参考,具体如下: 安装pymongo 下载pymongo: https://pypi.python.org/packages/82/26/f45f95841de5164c48e2e03aff7f0702e22cef2336238d212d8f93e91ea8/pymongo-3.4.0.tar.gz#md5=aa77f88e51e281c9f328cea701bb6f3e 安装pymongo: 解压后,cmd进入pymon

  • Python操作mongodb数据库进行模糊查询操作示例

    本文实例讲述了Python操作mongodb数据库进行模糊查询操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import pymongo import re from pymongo import MongoClient #创建连接 #10.20.66.106 client = MongoClient('10.20.4.79', 27017) #client = MongoClient('10.20.66.106', 27017) db_name = '

  • python连接mongodb数据库操作数据示例

    作者: wyh草样 出处:https://www.cnblogs.com/wyh0923/p/14047466.html 1.数据库配置类 MongoDBConn.py #encoding=utf-8 ''' Mongo Conn连接类 ''' import pymongo class DBConn: conn = None servers = "mongodb://localhost:27017" def connect(self): self.conn = pymongo.Conn

  • 如何用python 操作MongoDB数据库

    目录 一.前言 二.操作 MongoDB 1.安装 pymongo 2.连接 MongoDB 3.选择数据库 4.选择集合 5.插入数据 6.查询 7.更新数据 8.删除 一.前言 MongoDB属于 NoSQL(非关系型数据库),是一个基于分布式文件存储的开源数据库系统. 二.操作 MongoDB 1.安装 pymongo python 使用第三方库来连接操作 MongoDB,所以我们首先安装此库. pip3 install pymongodb 2.连接 MongoDB 使用 MongoCli

  • 利用Python操作MongoDB数据库的详细指南

    目录 前言 1 连接数据库 1.1 安装PyMongo 1.2 连接数据库 1.3 连接库与集合 2 MongoDB命令在Python中的对应方法 3 插入数据到MongoDB 基本语法 被插入的数据格式 说明 举例 4 从MongoDB中查询数据 查询一条数据 查询集合中所有数据 逻辑查询 查询并对结果进行计数 查询并对结果进行计数 对字段去重 5 更新/删除MongoDB中的数据 基本语法 被更新的数据 举例 6 MongoDB与Python不通用的操作 6.1 空值 6.2 布尔值 6.3

随机推荐