mongodb-API
mongodb-API
连接mongo(该操作一般在初始化时就执行)
出现 由于目标计算机积极拒绝,无法连接的错误时
查看是否进行虚拟机的端口转发
将 /etc/ 目录下的mongodb.conf 文件 bind_ip修改为 0.0.0.0, 表示任何主机都可以访问
重启服务 service mongodb restart
import pymongo
# 1.连接mongodb
client = pymongo.MongoClient(host='127.0.0.1', port=27017)
# client = pymongo.MongoClient('mongodb://127.0.0.1:27017/') # 另一种连接方式
# 2.指定数据库(没有会自动创建)
db = client['db_spider']
# 3.指定集合(没有就自动创建)
collection = db['student'] # 这样就声明了一个Collection对象
插入数据
# 4.插入数据
官方推荐使用insert_one()插入单条数据, insert_many()插入多条文档
data = {
'name': '夜阑',
'sex': '男',
'年龄': 20
}
res = collection.insert_one(data)
print(res) # 返回InsertOneResult 对象
print(res.inserted_id) # 调用其inserted_id属性获取_id(每条数据都有一个id属性来唯一标识)
data2 = {
'name': '丹丹',
'sex': '女',
'年龄': 18
}
collection.insert_many([data, data2]) # 多条数据以列表的形式传递
查询
基本使用
from pprint import pprint
# 查询一条;可指定条件(是一个字典)
result = collection.find_one()
# 查看集合中的全部文档
result1 = collection.find() # 返回Cursor类型,相当于一个生成器
pprint(list(result1))
for i in result1: # 将该对象通过for遍历
print(i)
# 当然我们也可以通过过ObjectId来查询,使用bson库里面的objectid:
from bson.objectid import ObjectId
res = collection.find_one({'_id': ObjectId('5d1b2df85a11e06dab918ec7')})
# 条件查询
collection.find({'name': 'yelan'})
resu = collection.find({'age': {'$gt': 20}}) # 查找年龄大于20的
噩梦条件
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.*'}}) # 查询姓名以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) # 返回updateResult类型,该类型有以下属性
print(res.matched_count, res.modified_count) # 属性:获取匹配的数据条数;影响的数据条数(被修改的)
# 当然也可以先查找,然后以字典的赋值的方式修改字段即可。如:
student = collection.find_one(condition)
student['name'] = 'wang'
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) # 删除指定的多条
mongodb-API的更多相关文章
- Java mongodb api疑问之MongoCollection与DBCollection
在学习Java mongodb api时发现,可以调用不同的java mongodb api来连接数据库并进行相关操作. 方式一: 该方式使用mongoClient.getDB("xxx&q ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
2.5.7 MongoDB -- API实现 问题查询单个实现 问题查询列表实现 问题跨集合查询实现 问题创建实现 问题更新实现 问题回答实现 问题评论实现 问题投票实现 回答实现 QuestionC ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
2.5.8 MongoDB -- API重构 Lighter.Domain Lighter.Application.Contract Lighter.Application LighterApi Li ...
- PHP 操作mongodb api大部分方法
<?php /* PHP mongodb * 全部curd操作 * @author:xiaojiang * @date: 2014-10-27 */ //查看 mongo类版本 1.30 以后版 ...
- PHP Mongodb API参考
<?php /*** Mongodb类** examples: * $mongo = new HMongodb("127.0.0.1:11223"); * $mongo-&g ...
- MongoDB API和python操作
安装 下载mongodb的版本,两点注意 根据业界规则,偶数为稳定版,如1.6.X,奇数为开发版,如1.7.X 32bit的mongodb最大只能存放2G的数据,64bit就没有限制 到官网,选择合适 ...
- MongoDB API java的使用
1.创建一个MongoDB数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017. Mongo mongo=new Mongo(); 2.获得与某个数据库(例如“test”)的 ...
- [笔记]MongoDB 二(Linux下MongoDB API C++编程)
一.连接类 DBClientConnection,派生自DBClientBase.DBClientBase类是实现query, update, insert, remove等功能. 构造函数:DBCl ...
- Mongodb基本操作说明
Mongodb基本操作说明 1.首先cmd(管理员方式运行)下启动mongo服务(类似初始化工具): Mongod.exe 默认文件夹为 :c:\data\db 如果没有创建该文件夹的话,需要先创建该 ...
- mongodb入门学习小记
Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...
随机推荐
- 预分配——fallocate的前世今生
最近比较懒,还是加班写点东西吧,不然过段时间又把这些整理的东西弄丢了. 写什么呢?写一些跟工作相关的吧!因为笔者从事多媒体录像相关的开发工作,因此常常涉及到优化写卡策略.提升写卡性能相关的方面的事情. ...
- 《手把手教你》系列练习篇之6-python+ selenium自动化测试(详细教程)
1. 简介 前面文章我们了解了如何获取元素的text属性值,和判断元素是否显示在页面(is_displayed()方法),本文我们来学习下,判断一个控件是否被选中状态. 2. 验证控件是否被选中 还是 ...
- Centos 6.x Openssh 升级 7.7p1 版本
OpenSSH 升级 目前在一家金融公司上班,正好赶上金融公司各种暴雷,本人心里慌慌的. 然后就是金融公司要进行的最低的三级等保评测,各种修改系统安全,密码强度.WAF.防火墙等各种. 评测公司对我司 ...
- No provider available for the service com.xxx.xxx 错误解决
HTTP Status 500 - Servlet.init() for servlet springmvc threw exception type Exception report message ...
- Java之Retry重试机制详解
应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作.这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务上传数据后对返回的结果进行处理:第二步拿到第一步结 ...
- shell一键部署nginx+tomcat
1.首先拉取环境 tomcat需要用到jdk环境 提前准备好nginx源码包,放于指定目录下 vim test.sh #!/bin/bash yum -y install gcc gcc-c++ z ...
- 配置aria2
Mac 用户肯定都受够了百度网盘在自己电脑上的糟糕体验,至少我是如此:安装官方的 App,经常下载时中断,有时甚至 Bug 般连续中断,无奈使用浏览器下载,速度却是令人挠头.花点时间来配置 aria2 ...
- RubyGem 下载时连接失败的解决方法
RubyGem 下载 gem 包失败,有一定原因是 https 导致的. 搜索了很久,找到一个解决的方法. 1.下载 cacert.pem,也就是 curl 的证书. http://curl.haxx ...
- luogu P3110 [USACO14DEC]驮运Piggy Back |最短路
题目描述 Bessie and her sister Elsie graze in different fields during the day, and in the evening they b ...
- Ubuntu18.04安装openCV4.1.2
Ubuntu18.04下安装openCV4.1.2 注意: 在整个安装过程中,包括后期QT的使用中不要出现中文路径.会很坑的. 一.下载openCV4.1.2 可以再官网进行下载https://ope ...