pymongo操作手册

连接数据库

  • 方法一(推荐)
import pymongo
client = pymongo.MongoClient(host="localhost",port=27017)
  • 方法二
import pymongo
client = pymongo.MongoClient(host="mongodb://127.0.0.1:27017/")

指定数据库

  • 方法一(推荐)
db = client["dbName"]	# 指定dbName数据库
  • 方法二
db = client.test

指定集合

  • 方法一(推荐)
collection = db["colName"]	# 指定colName集合
  • 方法二
collection = db.colName

插入数据

insert()

insert()方法可以插入一条或多条数据,返回主键_id_id列表

插入一条数据示例

person_1 = {
"name": "kainhuck",
"gender": "boy",
"hobby": [
"python", "golang", "dart"
]
} ret = collection.insert(person_1)
print(ret) # 输出: 5e575bc1601c0c6e37bbde3b

插入多条示例

person_1 = {
"name": "kainhuck",
"gender": "boy",
"hobby": [
"python", "golang", "dart"
]
}
person_2 = {
"name": "kainhuck",
"gender": "boy",
"hobby": [
"python", "golang", "dart"
]
} ret = collection.insert([person_1, person_2])
print(ret)
# 输出: [ObjectId('5e575c417c310d22c0fda767'), ObjectId('5e575c417c310d22c0fda768')]

但是现在官方已经不推荐使用该方法,而是使用下面两种方法

insert_one()

插入单条记录,返回InsertOneResult对象

通过 inserted_id 属性获取_id

person_1 = {
"name": "kainhuck",
"gender": "boy",
"hobby": [
"python", "golang", "dart"
]
} ret = collection.insert_one(person_1)
print(ret) # 输出: <pymongo.results.InsertOneResult object at 0x7fbebae38b00>
print(ret.inserted_id) # 输出: 5e575d179fd474694b4b0d76

insert_many()

插入多条数据,返回InsertManyResult对象

通过 inserted_ids 属性获取_id列表

person_1 = {
"name": "kainhuck",
"gender": "boy",
"hobby": [
"python", "golang", "dart"
]
}
person_2 = {
"name": "kainhuck",
"gender": "boy",
"hobby": [
"python", "golang", "dart"
]
} ret = collection.insert_many([person_1, person_2])
print(ret) # 输出: <pymongo.results.InsertManyResult object at 0x7fc17e7a8d80>
print(ret.inserted_ids)
# 输出: [ObjectId('5e575de663ea85cf36ac6083'), ObjectId('5e575de663ea85cf36ac6084')]

查询数据

查询参数语法同 MongoDB语法

符号 含义 示例
$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来指定正则匹配,^M.*代表以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'} 自身粉丝数等于关注数

find_one()

返回一个结果,dict类型或者None

per = collection.find_one({"name": "kainhuck"})
print(per)
# 输出:
# {'_id': ObjectId('5e575bb73570a50e5dea473a'), 'name': 'kainhuck', 'gender': 'boy', 'hobby': ['python', 'golang', 'dart']}

find()

返回多个结果,是一个迭代器

不加参数表示全部查询

pers = collection.find({"name": "kainhuck"})
for each in pers:
print(each)

count_documents()

统计满足条件的个数

不加参数表示统计所有个数

count = collection.count_documents({"name": "kainhuck"})
print(count)

sort()

将返回结果按条件排序,返回迭代起

pymongo.ASCENDING 升序

pymongo.DESCENDING 降序

返回迭代器

results = db.collection.find().sort('name', pymongo.ASCENDING) # 升序(默认)
results = db.collection.find().sort('name', pymongo.DESCENDING)  #降序
# 多列排序
results = db.collection.find().sort([
("name", pymongo.ASCENDING),("age", pymongo.DESCENDING)
])

skip()

跳过记录数

0 代表不跳过

返回迭代器

results = collection.find().skip(10)

limit()

返回上限

0 代表无上限

返回迭代器

results = collection.find().limit(10)

更新数据

查询参数语法同 MongoDB语法

update_one()

修改单条文档,返回结果是UpdateResult类型

调用matched_countmodified_count属性分别获取匹配的条数和影响的条数

ret = collection.update_one({"name": "kainhuck"}, {"$set": {"gender": "girl"}})
print(ret.matched_count) # 输出: 1
print(ret.modified_count) # 输出: 1

update_many()

修改多条文档,返回结果是UpdateResult类型

调用matched_countmodified_count属性分别获取匹配的条数和影响的条数

ret = collection.update_many({"name": "kainhuck"}, {"$set": {"gender": "girl"}})
print(ret.matched_count) # 输出: 9
print(ret.modified_count) # 输出: 8

删除数据

remove()

删除指定条件的所有数据

result = db.collection.remove({"age" : {"$gte" : 10}})

print(result)  # {'ok': 3, 'n': 3}

delete_one()

删除第一条符合条件的数据,返回DeleteResult类型数据

result = collection.delete_one({'name': 'kainhuck'})
print(result.deleted_count) # 1

delete_many()

删除所有符合条件的数据,返回DeleteResult类型数据

result = collection.delete_many({'name': 'kainhuck'})
print(result.deleted_count) # 8

其他方法

  • find_one_and_delete()
  • find_one_and_replace()
  • find_one_and_update()

python操作mongoDB(pymongo的使用)的更多相关文章

  1. Python操作MongoDB(PyMongo模块的使用)

    #!/usr/bin/env python #coding:utf-8 # Author:   --<qingfengkuyu> # Purpose: MongoDB的使用 # Creat ...

  2. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  3. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  4. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

  5. python操作mongodb

    # python操作mongodb # 首先,引入第三方模块pymongo,该模块是python用来操作mongodb的 import pymongo # 第二步,设置ip地址,以及表格名称,表格名字 ...

  6. 使用Python操作MongoDB

    MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...

  7. MongoDB的安装与python操作MongoDB

    一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...

  8. python 操作mongoDB数据库

    网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...

  9. 【转】Python操作MongoDB

    Python 操作 MongoDB   请给作者点赞--> 原文链接 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面 ...

随机推荐

  1. spark脑图

    spark脑图:

  2. 转载和补充:Oracle中的一些特殊字符

    oracle通配符,运算符的使用 用于where比较条件的有: 等于:=.<.<=.>.>=.<> 包含:in.not in exists.not exists 范 ...

  3. C++11常用特性介绍——for循环新用法

    一.for循环新用法——基于范围的for循环 for(元素类型 元素对象 : 容器对象) { //遍历 } 1)遍历字符串 std::string str = "hello world&qu ...

  4. Tomcat 配置目录及文件说明!

    ==================================================================================

  5. python学习 —— post请求方法的应用

    声明:本篇仅基于兴趣以及技术研究而对B站曾经发生过的抢楼事件背后相关技术原理进行研究而写.请不要将其作为私利而对B站以及B站用户体验造成影响!谢谢合作!若本文对B站及其用户带来困扰,请联系本人删除本文 ...

  6. PAT T1012 Greedy Snake

    直接暴力枚举,注意每次深搜完状态的还原~ #include<bits/stdc++.h> using namespace std; ; int visit[maxn][maxn]; int ...

  7. HashMap 原理?jdk1.7 与 1.8区别

    HashMap 结构 以及 1.7 与 1.8 一.区别 01. jdk 1.7 用的是头插法,而jdk1.8以后使用的是尾插法?为什么这样做呢?因为 JDK 1.7 是用单链表进行纵向延伸,采用头插 ...

  8. vs2013中配置SQLite数据库

    转载:https://maplefan.com/index.php/2019/08/14/visual-studio-2013%e9%85%8d%e7%bd%aesqlite3%e7%9a%84%e6 ...

  9. Windows对应的"Hello,world"程序

    <Windows程序设计>(第五版)(美Charles Petzold著) https://docs.microsoft.com/zh-cn/windows/desktop/apiinde ...

  10. 第1节 Scala基础语法:scala中的方法源码分析

    val list=List(1,2,3,4) list.reduce((x:Int,y:Int)=>x+y)--->list.reduceLeft((x:Int,y:Int)=>x+ ...