客户端
客户端连接
$ bin/mongo.exe
MongoDB shell version v3.6.13
help 打开帮助
show dbs #查看当前有哪些库
use blog #有就切换过去,没有就创建后切换过去。刚创建的并不在数据库列表中,需要写入数据后才能看到
db #查看当前数据库
db.users.insert({user:"tom", age:20}) #db指代当前数据库;users集合名
也可以使用官方的可视化工具Compass。https://www.mongodb.com/products/compass
连接地址mongodb://127.0.0.1:27017
Pycharm插件
在settings/plugins中输入mongo,安装Mongo Plugin,完成后重启Pycharm。
菜单项View/Tool Windows/Mongo Explorer
Python连接
开发指南https://docs.mongodb.com/guides/server/drivers/
Mongodb官方推荐使用pymongo。
参看 https://docs.mongodb.com/ecosystem/drivers/pymongo/
缺省安装pymongo 3.x,支持MongoDB2.6+,兼容Python 3.4+。
mongodb的连接字符串
mongodb://username:[email protected]:27017/test
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
#两种方法
#with MongoClient(host='127.0.0.1', port=27017) as cli:
with MongoClient(url) as cli:
# 使用数据库 两种方法都可以
#db: Database = cli['user']
db: Database = cli.user
print(type(db))
# 使用表 两种方法都可以
#table: Collection = db['pa']
table: Collection = db.pa
print(type(table), table)
# 添加记录
table.insert_one({
"a": 123
})
# 查看所有记录
l = table.find()
print(*l)
"""
<class 'pymongo.database.Database'>
<class 'pymongo.collection.Collection'> Collection(Database(MongoClient(host=['127.0.0.1:27017'], document_class=dict, tz_aware=False, connect=True), 'user'), 'pa')
{'_id': ObjectId('61cb6292d8661642727b45bb'), 'a': 1, 'b': 2} {'_id': ObjectId('61cb66ef62ae9435ee42c319'), 'a': 123}
"""
既能用属性访问,又能像key一样访问,一定用到了魔术方法的__getattr__
、__getitem__
。
基本概念
MongoDB中可以创建使用多个库,但有一些数据库名是保留的,可以直接访问这些有特殊作用的数据
库。
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
关系数据库(mariadb) | mongodb |
---|---|
Database(库) | Database |
Table(表) | Collection |
Row(记录) | Document |
Column(字段) | Field |
Join(连接) | Embedded Document嵌入文档或Reference引用 |
Primary Key(主键) | 主键 (MongoDB提供了key为 _id ) |
插入数据
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
print(type(db))
# 使用表
table: Collection = db.pa
print(type(table), table)
# 添加记录
i=table.insert_one({
"a": 123
})
#返回id
print(i.inserted_id)
# 查看所有记录
l = table.find()
print(*l)
每条数据插入后都有一个唯一key,属性_id
唯一标识一个文档。没有没有显式指明该属性,会自动生成一个ObjectId类型的_id
属性。
ObjectId有12字节组成
- 4字节时间戳
- 3字节机器识别码
- 2字节进程id
- 3字节随机数
import datetime
i="61cb7db5fd08a5cc3fe73059"
print(datetime.datetime.fromtimestamp(int(i[:8],16)))
import bson
print(bson.ObjectId(i).generation_time)
文档
每一条记录对应一个文档,其格式使用BSON。BSON即Binary JSON。
类型参考 https://docs.mongodb.com/v3.6/reference/bson-types/
文档
-
文档中,使用键值对
-
文档中的键/值对是有序的
-
键是字符串
-
区分大小写,使用UTF-8字符
-
键不能含有\0 (空字符)。这个字符用来表示键字符串的结尾
.
和$
有特别的意义,只有在特定环境下才能使用以下划线
_
开头的键是保留的,例如_id
-
-
值可以是
- 字符串、32位或64位整数、双精度、时间戳(毫秒)、布尔型、null
- 字节数组、BSON数组、BSON对象
查询
单条查询
只返回一条,且为字典,不为对象
find_one
第一参数是filter(过滤条件),相当于SQL的where子句。
# 查询
result = users.find_one({'name':'tom'})
print(type(result), result) # 返回字典带_id
# 使用key查询
from bson.objectid import ObjectId
result = users.find_one({'_id':ObjectId('5d48d95d4fd47046028b8e54')})
print(type(result), result)
result = users.find_one({'name':'tommy'})
print(type(result), result) # 查不到,返回None
多条查询
返回多条,且为惰性生成器对象,需要主动遍历
# 多条查询
results = users.find({'name':'tom'})
print(type(results)) # pymongo.cursor.Cursor对象
print(results) # 可迭代对象
for x in results:
print(type(x), x) # 字典
返回游标,可迭代对象
查询操作
比较
不同BSON类型值的比较参见指定的BSON比较顺序。
名称 | 描述 | 范例 |
---|---|---|
$eq |
等于= | { <field>: { $eq: <value> } } 或者直接写{ field: <value> } |
$gt |
大于> | db.inventory.find( { qty: { $gt: 20 } } ) qty大于20的项e |
$gte |
大于等于>= | db.inventory.find( { qty: { $gte: 20 } } ) qty大于等于20的项 |
$in |
在集合里面 in | db.inventory.find( { quantity: { $in: [ 5, 15 ] } } ) |
$lt |
小于< | db.inventory.find( { qty: { $lt: 20 } } ) |
$lte |
小于等于<= | db.inventory.find( { qty: { $lte: 20 } } ) |
$ne |
不等于!= | db.inventory.find( { qty: { $ne: 20 } } ) |
$nin |
不在集合里面 not in | db.inventory.find( { quantity: { $nin: [ 5, 15 ] } } ) |
逻辑
名称 | 描述 | 范例 |
---|---|---|
$and |
与 | db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } ) price不等于1.99且price存在 |
$not |
非 | db.inventory.find( { price: { $not: { $gt: 1.99 } } } ) price不大于1.99或者不存在 |
$or |
或 | db.inventory.find( { $or: [ { quantity: 20 }, { price: 10 } ] } ) quantity=20或者price=10 |
元素
名称 | 描述 | 范例 |
---|---|---|
$exists |
存在 | db.inventory.find( { qty: { $exists: true, $nin: [ 5, 15 ] } } ) qty存在且不在[5,15]中 |
$type |
类型 | db.inventory.find({ field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }) db.inventory.find({'b': {'$type': 16}}) b类型为短整 |
type数据类型(BSON type)
Number | Alias | Notes |
---|---|---|
Double | 1 | "double" |
String | 2 | "string" |
Object | 3 | "object" |
Array | 4 | "array" |
Binary data | 5 | "binData" |
ObjectId | 7 | "objectId" |
Boolean | 8 | "bool" |
Date | 9 | "date" |
Null | 10 | "null" |
Regular Expression(正则表达式) | 11 | "regex" |
JavaScript | 13 | "javascript" |
32-bit integer(短整) | 16 | "int" |
Timestamp(时间戳) | 17 | "timestamp" |
64-bit integer(长整) | 18 | "long" |
Min key | -1 | "minKey" |
Max key | 127 | "maxKey" |
评估
名称 | 描述 | 范例 |
---|---|---|
$expr |
允许在查询语言中使用聚合表达式。 | |
$mod |
取模 | db.inventory.find({'a': {'$mod': [3, 1]}}) 用a的值与3取余,余1的返回 |
$regex |
正则表达式匹配 | db.inventory.find({'b': {'$regex': '^s'}}) 返回b的值以s开头的 |
$where |
匹配满足 JavaScript 表达式的文档。 |
地理空间
名称 | 描述 | 范例 |
---|---|---|
$geoIntersects |
选择与GeoJSON几何相交的几何。该2dsphere索引支持 $geoIntersects 。 |
|
$geoWithin |
在边界GeoJSON 几何中选择几何。该2dsphere和2D指标支持 $geoWithin 。 |
|
$near |
返回点附近的地理空间对象。需要地理空间索引。该2dsphere和2D指标支持 $near 。 |
|
$nearSphere |
返回球体上某个点附近的地理空间对象。需要地理空间索引。该2dsphere和2D指标支持 $nearSphere 。 |
数组
名称 | 描述 | 范例 |
---|---|---|
$all |
匹配包含查询中指定的所有元素的数组。 | |
$elemMatch |
如果数组字段中的元素与所有指定$elemMatch 条件匹配,则选择文档。 |
|
$size |
如果数组字段是指定大小,则选择文档。 |
按位
名称 | 描述 | 范例 |
---|---|---|
$bitsAllClear |
匹配其中一组位位置的数值或二进制值都具有值0 。 |
|
$bitsAllSet |
匹配其中一组位位置的数值或二进制值都具有值1 。 |
|
$bitsAnyClear |
匹配数字或二进制值,其中来自一组位位置的任何位的值为0 。 |
|
$bitsAnySet |
匹配数字或二进制值,其中来自一组位位置的任何位的值为1 。 |
投影
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# 使用表
table: Collection = db.pa
#投影所有
print(*table.find({'qty': 100}), sep='\n')
# {'_id': ObjectId('61ccadbaa4c36483d0e8003e'), 'item': 'paper', 'qty': 100, 'size': {'h': 8.5, 'w': 11, 'uom': 'in'}, 'status': 'D'}
#投影'item', 'qty', 'status'这三个,这里会默认显示_id
print(*table.find({'qty': 100}, ['item', 'qty', 'status']), sep='\n')
# {'_id': ObjectId('61ccadbaa4c36483d0e8003e'), 'item': 'paper', 'qty': 100, 'status': 'D'}
#投影'item', 'qty', 'status',用的是白名单,默认显示_id
print(*table.find({'qty': 100}, {'item': 1, 'qty': True, 'status': 1}), sep='\n')
#{'_id': ObjectId('61ccadbaa4c36483d0e8003e'), 'item': 'paper', 'qty': 100, 'status': 'D'}
#使用黑名单投影,除了'_id','size'中的'w' ,'status' 其他的都投影
print(*table.find({'qty': 100}, {'_id': False, 'size.w': False, 'status': 0}), sep='\n')
#{'item': 'paper', 'qty': 100, 'size': {'h': 8.5, 'uom': 'in'}}
聚合
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# 使用表
table: Collection = db.pa
#先匹配a存在的,然后聚合条数
x=table.aggregate([
{'$match':{'a':{'$exists':1}}},
{'$count':'a的个数'}
])
#{'a的个数': 9}
x=table.aggregate([
#先匹配
{'$match':{'qty':{'$exists':1}}},
#再分组求和 w_sum是自定义名称,作为求和后结果的key
{'$group':{'_id':'$size.h','w_sum':{'$sum':'$size.w'}}},
#最后再排序
#1表示升序
#-1表示降序
{'$sort': {'_id':1}}
])
"""
{'_id': 8.5, 'w_sum': 22}
{'_id': 10, 'w_sum': 15.25}
{'_id': 14, 'w_sum': 21}
{'_id': 22.85, 'w_sum': 30}
"""
print(*x,sep='\n')
排序
from pymongo import MongoClient,DESCENDING,ASCENDING
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# 使用表
table: Collection = db.pa
#先过滤,再根据'size.w'倒序,'size.w'相同就用'qty'顺序排列,ASCENDING顺序可以省略
x=table.find({'qty':{'$exists':1}}).sort([('size.w',DESCENDING),('qty',ASCENDING)])
print(*x,sep='\n')
分页
from pymongo import MongoClient,DESCENDING,ASCENDING
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# 使用表
table: Collection = db.pa
#跳过两个,取3个
x=table.find().limit(3).skip(2)
print(*x,sep='\n')
skip 跳过几个,limit限制结果个数。
也可在其他分组后使用
更新
更新操作 | 含义 | 实例 |
---|---|---|
$inc | 对给定字段数字值增减 | {'$inc':{'age':-5}} |
||
$set | 设置字段值,如果字段不存在则创建 | {'$set':{'gender':'M'}} |
||
$unset | 移除字段 | {'$unset':{'Name':""}} |
-
只修改匹配到的第一个
对数字操作$inc
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
filte = {'qty': 25}
all_list = table.find(filte)
print(*all_list, sep='\n')
print('=' * 100)
#对匹配到的文档,'size.h'-2,'size.w'+2
u = table.update_one(filte, {'$inc': {'size.h': -2, 'size.w': 2}})
print('匹配:', u.matched_count)
print('更新:', u.modified_count)
print('更新行的id:', u.upserted_id)
print('=' * 100)
all_list = table.find(filte)
print(*all_list, sep='\n')
"""
结果
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'item': 'journal', 'qty': 25, 'size': {'h': 10, 'w': 25, 'uom': 'cm'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9db'), 'item': 'journal', 'qty': 25, 'size': {'h': 14, 'w': 21, 'uom': 'cm'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9dd'), 'item': 'mousepad', 'qty': 25, 'size': {'h': 19, 'w': 22.85, 'uom': 'cm'}, 'status': 'P'}
====================================================================================================
匹配: 1
更新: 1
更新行的id: None
====================================================================================================
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'item': 'journal', 'qty': 25, 'size': {'h': 8, 'w': 27, 'uom': 'cm'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9db'), 'item': 'journal', 'qty': 25, 'size': {'h': 14, 'w': 21, 'uom': 'cm'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9dd'), 'item': 'mousepad', 'qty': 25, 'size': {'h': 19, 'w': 22.85, 'uom': 'cm'}, 'status': 'P'}
"""
-
修改所有的
修改$set
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
filte = {'qty': 25}
all_list = table.find(filte)
print(*all_list, sep='\n')
print('=' * 100)
u = table.update_many(filte, {'$set': {'size.uom': 'www'}})
print('匹配:', u.matched_count)
print('更新:', u.modified_count)
print('=' * 100)
all_list = table.find(filte)
print(*all_list, sep='\n')
"""
结果
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'item': 'journal', 'qty': 25, 'size': {'h': 48, 'w': 27, 'uom': 'www'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9db'), 'item': 'journal', 'qty': 25, 'size': {'h': 14, 'w': 21, 'uom': 'cm'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9dd'), 'item': 'mousepad', 'qty': 25, 'size': {'h': 19, 'w': 22.85, 'uom': 'cm'}, 'status': 'P'}
====================================================================================================
匹配: 3
更新: 2
====================================================================================================
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'item': 'journal', 'qty': 25, 'size': {'h': 48, 'w': 27, 'uom': 'www'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9db'), 'item': 'journal', 'qty': 25, 'size': {'h': 14, 'w': 21, 'uom': 'www'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9dd'), 'item': 'mousepad', 'qty': 25, 'size': {'h': 19, 'w': 22.85, 'uom': 'www'}, 'status': 'P'}
"""
移除字段$unset
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
filte = {'qty': 25}
all_list = table.find(filte)
print(*all_list, sep='\n')
print('=' * 100)
u = table.update_many(filte, {'$unset': {'size.ppp': ''}})
print('匹配:', u.matched_count)
print('更新:', u.modified_count)
print('=' * 100)
all_list = table.find(filte)
print(*all_list, sep='\n')
"""
结果
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'item': 'journal', 'qty': 25, 'size': {'h': 48, 'w': 27, 'uom': 'www', 'ppp': 'abc'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9db'), 'item': 'journal', 'qty': 25, 'size': {'h': 14, 'w': 21, 'uom': 'www'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9dd'), 'item': 'mousepad', 'qty': 25, 'size': {'h': 19, 'w': 22.85, 'uom': 'www'}, 'status': 'P'}
====================================================================================================
匹配: 3
更新: 1
====================================================================================================
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'item': 'journal', 'qty': 25, 'size': {'h': 48, 'w': 27, 'uom': 'www'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9db'), 'item': 'journal', 'qty': 25, 'size': {'h': 14, 'w': 21, 'uom': 'www'}, 'status': 'A'}
{'_id': ObjectId('61cdee229cb0723f93bce9dd'), 'item': 'mousepad', 'qty': 25, 'size': {'h': 19, 'w': 22.85, 'uom': 'www'}, 'status': 'P'}
"""
替换与过滤器匹配的单个文档。
匹配到多个,也只更新一个
from pymongo import MongoClient
# 使用_id来查询,需要导入ObjectId
from bson.objectid import ObjectId
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
filte = {'_id': ObjectId('61ccadbaa4c36483d0e8003c')}
all_list = table.find(filte)
print(*all_list, sep='\n')
print('=' * 100)
u = table.replace_one(filte, {'a': 1, 'b': 2})
print('匹配:', u.matched_count)
print('更新:', u.modified_count)
print('=' * 100)
all_list = table.find(filte)
print(*all_list, sep='\n')
"""
结果
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'item': 'journal', 'qty': 25, 'size': {'h': 48, 'w': 27, 'uom': 'www'}, 'status': 'A'}
====================================================================================================
匹配: 1
更新: 1
====================================================================================================
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'a': 1, 'b': 2}
"""
也可以使用upsert选项来,在未匹配到的情况下,将替换文档插入为新的文档
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
filte = {'a': 2}
all_list = table.find(filte)
print(*all_list, sep='\n')
print('=' * 100)
u = table.replace_one(filte, {'a': 1, 'b': 2},upsert=True)
print('匹配:', u.matched_count)
print('更新:', u.modified_count)
print('插入的新文档id',u.upserted_id)
print('=' * 100)
all_list = table.find({'a': 1, 'b': 2})
print(*all_list, sep='\n')
"""
结果
====================================================================================================
匹配: 0
更新: 0
插入的新文档id 61cdf9500e69d7b9f5f09caa
====================================================================================================
{'_id': ObjectId('61ccadbaa4c36483d0e8003c'), 'a': 1, 'b': 2}
{'_id': ObjectId('61cdf9500e69d7b9f5f09caa'), 'a': 1, 'b': 2}
"""
全文索引
https://docs.mongodb.com/manual/text-search/
创建索引
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
#创建文本索引
x = table.create_index([('item', 'text'), ('status', 'text')])
print(type(x),x)
查找
$text
将使用空格和大多数标点符号作为分隔符OR
对搜索字符串进行标记,并对搜索字符串中的所有此类标记执行逻辑运算。
查询查找包含"paper" "P"的文档
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
#文本搜索
l=table.find({'$text':{'$search':'paper P'}})
print(*l,sep='\n')
"""
结果
{'_id': ObjectId('61cdee229cb0723f93bce9de'), 'item': 'notebook', 'qty': 50, 'size': {'h': 8.5, 'w': 11, 'uom': 'in'}, 'status': 'P'}
{'_id': ObjectId('61cdee229cb0723f93bce9dd'), 'item': 'mousepad', 'qty': 25, 'size': {'h': 19, 'w': 22.85, 'uom': 'www'}, 'status': 'P'}
{'_id': ObjectId('61cdee229cb0723f93bce9df'), 'item': 'paper', 'qty': 100, 'size': {'h': 8.5, 'w': 11, 'uom': 'in'}, 'status': 'D'}
{'_id': ObjectId('61ccadbaa4c36483d0e8003e'), 'item': 'paper', 'qty': 100, 'size': {'h': 8.5, 'w': 11, 'uom': 'in'}, 'status': 'D'}
"""
删除
删除匹配到的第一条
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
fil = {'status': 'A'}
print('目前个数:', table.count_documents(fil))
print('=' * 50)
l = table.delete_one(fil)
print('删除的个数:', l.deleted_count)
print('返回的信息:', l.raw_result)
print('=' * 50)
all_list = table.count_documents(fil)
print('目前个数:', all_list)
"""
结果
目前个数: 3
==================================================
删除的个数: 1
返回的信息: {'n': 1, 'ok': 1.0}
==================================================
目前个数: 2
"""
删除匹配到的所有
from pymongo import MongoClient
from pymongo.database import Database
from pymongo.collection import Collection
url = 'mongodb://127.0.0.1:27017'
# 上下文管理连接数据库
with MongoClient(url) as cli:
# 使用数据库
db: Database = cli.user
# print(type(db))
# 使用表
table: Collection = db.pa
fil = {'status': 'D'}
print('目前个数:', table.count_documents(fil))
print('=' * 50)
l = table.delete_many(fil)
print('删除的个数:', l.deleted_count)
print('返回的信息:', l.raw_result)
print('=' * 50)
all_list = table.count_documents(fil)
print('目前个数:', all_list)
"""
结果
目前个数: 3
==================================================
删除的个数: 3
返回的信息: {'n': 3, 'ok': 1.0}
==================================================
目前个数: 0
"""
db.collection.delete_many({})
删除所有文档,慎用