作者:从前泪流光e_446 | 来源:互联网 | 2023-05-31 13:05
篇首语:本文由编程笔记#小编为大家整理,主要介绍了mongodb-API相关的知识,希望对你有一定的参考价值。 mongodb-API连接mongo(该操作一般在初始化时就执行)出现 由于目标计算机积
篇首语:本文由编程笔记#小编为大家整理,主要介绍了mongodb-API相关的知识,希望对你有一定的参考价值。
mongodb-API
连接mongo(该操作一般在初始化时就执行)
出现 由于目标计算机积极拒绝,无法连接的错误时
查看是否进行虚拟机的端口转发
将 /etc/ 目录下的mongodb.conf 文件 bind_ip修改为 0.0.0.0, 表示任何主机都可以访问
重启服务 service mongodb restart
import pymongo
?
插入数据
查询
基本使用
from pprint import pprint
?
噩梦条件
and条件 {$and: [{expression1}, {expression2}, ...] }
or 条件 {$or: [{expression1}, {expression2}, ...] }
and 和or混用
db.table.find({$or:[{$and:[{sex:‘女‘}, {age:18}]},{$and:[{sex:‘男‘}, {age:{$gt:18}}]}]})
?
比较符号
操作符 | 描述 | 示例 |
---|
$lt |
小于 less than |
{‘age‘: {‘$lt‘: 24}} |
$gt |
大于 greater than |
{‘age‘: {‘$gt‘: 18}} |
$lte |
小于等于 less than or equal to |
{‘age‘: {‘$lte‘: 20}} |
$gte |
大于等于 great than or equal to |
{‘age‘: {‘$gte‘: 18}} |
$ne |
不等于 not equal to |
{‘age‘: {‘$ne‘: 20}} |
$in |
在范围内 |
{‘age‘: {‘$in‘: [20, 30]}} |
$nin |
不在范围内 |
{‘age‘: {‘$nin‘: [20, 30]}} |
过滤条件
支持正则匹配查询
res = collection.find({‘name‘: {‘$regex‘: ‘^y.*‘}})
find()方法支持链式的调用;或者说Collection对象的查询方法支持链式的调用
计数
调用count()方法,返回查询结果有多少条数据
count = collection.find().count()
排序
调用sort()方法,并在其中传入排序的字段及升降序标志
pymongo.ASCENGING指定升序 || pymongo.DESCENGING指定降序
collection.find().sort(‘name‘, pymongo.ASCENGING) # 对查询结果升序排列
限制
limit()方法,限制查询的结果。该方法接受一个int型
collection.find().sort(‘name‘, pymongo.ASCENGING).limit(3) # 截取结果的前3个
更新
使用 update()_one 方法,修改一条,指定更新的条件和更新后的数据即可
cOndition= {‘name‘: ‘yelan‘}
res = collection.update_one(condition, {‘$set‘: {‘name‘: ‘wang‘}})
print(res)
update_many()方法,修改满足条件的多条数据
假设我要对某文档中年龄大于18岁的所有成员+1岁。使用操作符:‘$inc‘ 自增1
cOndition= {‘age‘: {‘$gt‘: 18}}
result = collection.update_many(condition, {‘$inc‘: {‘age‘: 1}})
删除
remove()方法指定删除的条件即可,符合条件的数据都会删除
res = collection.remove({‘name‘: ‘yelan‘})
res会返回删除的数量
推荐使用 delete_one()和delete_many()方法分别删除满足条件的一条和多条数据
collection.delete_one({‘age‘: 20})
# 删除年龄小于18或者年龄大于60的多条数据
collection.delete_many({$or: [{‘age‘: {‘$lt‘: 18}}, {‘age‘: {‘$gt‘: 60}}]})
其他操作
pymongo还提供了一些组合方法,如find_one_delete()、find_one_update()等,查找后删除、查找后更新。
http://api.mongodb.com/python/curent/api/pymongo/collection.html
自定义封装
class MyMongodb:
def __init__(self, db, collection): # 初始化传入使用的数据库,集合
self.client = pymongo.MongoClient(host=‘127.0.0.1‘, port=27017) # 初始化时连接mongo
self.db = self.client[db] # 初始化时进入使用的数据库
self.my_col = self.db[collection] # 初始化时进入集合操作
def insert(self, dict, only_One=True):
if only_one:
self.my_col.insert_one(dict)
else:
self.my_col.insert_many(dict)
def find(self, find_One=True, ):
if find_one:
result_One= self.my_col.find_one()
pprint(result_one)
# elif find_one and condition:
# result_con = self.my_col.find_one()
# pprint(result_con)
else:
result_many = self.my_col.find()
for u in result_many:
print(u)
def update(self, data, new_data, update_One=True):
if update_one:
self.my_col.update_one(data, {‘$set‘: new_data})
else:
self.my_col.update_many(data, {‘$set‘: new_data})
def remove(self, data, delete_One=True):
if delete_one:
self.my_col.delete_one(data)
else:
self.my_col.delete_many(data)
if __name__ == ‘__main__‘: # 主程序入口
my_db = MyMongodb(‘test_db‘, ‘stu‘) # 传入的数据库和集合,有则使用,无则创建
my_db.insert({‘name‘: ‘夜阑‘, ‘sex‘: ‘男‘, ‘年龄‘: 20}) # 1.插入一条文档
my_db.insert([
{‘name‘: ‘夜阑‘, ‘sex‘: ‘男‘, ‘age‘: 18},
{‘name‘: ‘liu‘, ‘sex‘: ‘男‘, ‘age‘: 24},
{‘name‘: ‘dan‘, ‘sex‘: ‘女‘, ‘age‘: 24},
], only_One=False) # 插入多条数据
my_db.find(find_One=False) # 查看多条,默认查看一条
my_db.update({‘name‘: ‘夜阑‘}, {‘name‘: ‘小红‘, ‘age‘: 22}) # 更新一条
my_db.update({‘name‘: ‘夜阑‘}, {‘name‘: ‘小红‘, ‘age‘: 22}, update_One=False) # 更新满足条件的多条数据
my_db.remove(({‘name‘: ‘liu‘}), delete_One=False) # 删除指定的多条