mongodb pymongo
mongodb
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
集合:对应数据库表
文档:对应数据库一条数据
插入文档
save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()
mongodb-insertOne
db.getCollection('test').insertOne({"price": 15, "number": 10, "name": "apple"})
mongodb-insertOne
db.getCollection('test').insertMany([{"price": 15, "number": 10, "name": "apple"}, {"price": 10, "number": 20, "name": "orange"}])
pymonodb-insert
import pymongohost = "192.168.234.241"
port = 30019
db = pymongo.MongoClient(host=host, port=port)# 集群
# pymongo.MongoClient("192.168.234.241:30019,192.168.234.241:30019")# 获取所有数据库
db.database_names()# test 数据库不存在则创建,有数据插入才会真实创建
db["test"]# 获取数据库的集合
db["test"].collection_names()# test 集合不存在则创建,有数据插入才会真实创建
document = db["test"]["test"]# insert_one
db.get_database("jenkins").get_collection('test').insert_one({"price": 15, "number": 10, "name": "apple"})# insert_many
db.get_database("jenkins").get_collection('test').insert_many([{"price": 5, "number": 10, "name": "watermelon"}, {"price": 10, "number": 30, "name": "grape"}])# insert
db.get_database("jenkins").get_collection('test').insert([{"price": 5, "number": 11, "name": "plum"}])
db.get_database("jenkins").get_collection('test').insert({"price": 5, "number": 11, "name": "plum"})
db.get_database("jenkins").get_collection('test').insert([{"price": 5, "number": 10, "name": "pear"}, {"price": 20, "number": 20, "name": " strawberry "}])# 集合更新文档
db.getCollection('job').update({"_id": "2021-11-33-15-46-31"}, {"status": "test"}, true)# db.collection.update(criteria,objNew,upsert,multi)
# criteria 查询条件
# objNew 更新数据
# upsert 如果不存在update的记录,是否插入objNew这个新的document。true为插入,默认是false,不插入。
# multi 默认是false,只更新找到的第一条记录。如果为true,按条件查出来的多条记录全部更新。
查询
条件
- {:{$lt:}} 小于
- {:{$gt:}} 大于
- {:{$gte:}} 大于等于
- {:{$lte:}} 小于等于
- {:{$ne:}} 不等于
- {$or: [{key1: value1}, {key2:value2}]} or
- {{key1: value1}, {key2:value2}} and
- {“key”: {"$in": [value]}}
- {“key”: {"$nin": [value]}}
- {"$regex": “”} 正则表达
- {"$not": “”}
mongodb-find
db.getCollection('test').find({"price": {"$gt": 10}})db.getCollection('test').find({"price": {"$gt": 10}, "number": {"$lt": 20}})db.getCollection('test').find({$or: [{"price": {"$gt": 5}}, {"number": {"$lt": 20}}]})db.getCollection('test').find({"price": {"$in": [10, 15]}})db.getCollection('test').find({"price": {"$nin": [10, 15]}})db.getCollection('job').find({"projectBranch": {"$regex": "\\d{1}"}})db.getCollection('job').find({"projectBranch": {$not: {"$regex": "\\d{1}"}}})
pymongo-find
# 大于
response = db.get_database("jenkins").get_collection('test').find({"price": {"$gt": 10}})
print(list(response))# and
response = db.get_database("jenkins").get_collection('test').find({"price": {"$gt": 10}, "number": {"$lt": 20}})
print(list(response))# or
response = db.get_database("jenkins").get_collection('test').find({"$or": [{"price": {"$gt": 5}}, {"number": {"$lt": 20}}]})
print(list(response))# in
response = db.get_database("jenkins").get_collection('test').find({"price": {"$in": [10, 15]}})
print(list(response))# nin
response = db.get_database("jenkins").get_collection('test').find({"price": {"$nin": [10, 15]}})
print(list(response))# regex
response = db.get_database("jenkins").get_collection('job').find({"projectBranch": {"$regex": "\\d{1}"}})
print(list(response))# not
response = db.get_database("jenkins").get_collection('job').find({"projectBranch": {"$not": {"$regex": "\\d{1}"}}})
print(list(response))# 集合查询
collection.find({"_id": "2021-11-26-15-13-46"}, {"_id": 1})
# db.collection.find(query, projection)
# query 是可选参数,基于查询操作符指定了查询的条件
# projection 返回的字段,1为要返回,0位不返回,1和0不能同时使用
# collection.find({"_id": "2021-11-26-15-13-46"}, {"_id": 0, "userName": 0}) 正确
# collection.find({"_id": "2021-11-26-15-13-46"}, {"_id": 1, "userName": 0}) 错误
排序、skip、limit
# sort 1 为升序排列,而 -1 是用于降序排列。
# skip 跳过多少条
# limit 取多少条
db.getCollection('job').find({"projectBranch": {$not: {"$regex": "\\d{1}"}}}).sort({"projectBranch": 1}).skip(1).limit(2)
# 顺序无关
db.getCollection('job').find({"projectBranch": {$not: {"$regex": "\\d{1}"}}}).sort({"projectBranch": 1}).limit(2).skip(1)
聚合
表达式
- $sum
- $max
- $min
- $avg
- $push 将值加入一个数组中,不会判断是否有重复的值
- $addToSet 将值加入一个数组中,判断是否有重复的值
- $ first 第一个
- $ last 最后一个
# 已libBranch 分组,统计个数
db.getCollection('job').aggregate([{$group : {_id : "$libBranch", num_tutorial : {$sum : 1}}}])
管道
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- m a t c h : 用 于 过 滤 数 据 , 只 输 出 符 合 条 件 的 文 档 。 match:用于过滤数据,只输出符合条件的文档。 match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档
mongodb-aggregate
db.getCollection('job').aggregate([{$match : {"projectBranch": {"$regex": "\\d{1}"}}}, {"$project": {"status": 1}}])db.getCollection('job').aggregate([{$match : {"projectBranch": {"$regex": "\\d{1}"}}}, {"$project": {"status": 1}}, {"$skip": 1}, {"$limit": 2}])# 顺序是有区别的
db.getCollection('job').aggregate([{$match : {"projectBranch": {"$regex": "\\d{1}"}}}, {"$project": {"status": 1}}, {"$limit": 2},{"$skip": 1}])
pymongo-aggregate
response = db.get_database("jenkins").get_collection('job').aggregate([{"$match" : {"projectBranch": {"$regex": "\\d{1}"}}}, {"$project": {"status": 1}}, {"$limit": 2},{"$skip": 1}])
print(list(response))
mongo+pandas
import pandas as pd
import pymongohost = "192.168.234.241"
port = 30019
db = pymongo.MongoClient(host=host, port=port)data = pd.DataFrame(db.get_database("jenkins").get_collection('test').find())db.close()
mongodb pymongo相关推荐
- pymongo的使用
mongodb pymongo 增 mongo.db.c_juzi.insert_one(var) 删 mongo.db.c_juzi.delete_one({'uuid': uuid_str}) 改 ...
- aspen和python一起使用_python-将$cond语句与$project一起使用并在PyMongo中聚合
我想使用pymongo基于条件逻辑语句来投影一个新字段. 如果"状态"字段为"成功结束"或"成功进行中",则该值应等于1.我尝试通过在$co ...
- MongoDB与MySQL的插入、查询性能测试
转载自:http://blog.csdn.net/clh604/article/details/19608869 1.1 MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地 ...
- Django项目连接MongoDB的三种方法
有三种方法连接Django到MongoDB数据库 1.PyMongo:PyMongo 是 MongoDB 与 Django 交互的标准驱动程序.这是在 Python 中使用 MongoDB 的官方和首 ...
- python进阶-MongoDB
目录 Python MongoDB MongoDB PyMongo 测试 PyMongo 一.Python MongoDB 创建数据库 1.创建数据库 2.检查数据库是否存在 二.Python Mon ...
- Mongdb篇三。 用Python代码实现Mongdb数据库的增删查改、集合管道示例,超详细,全部用实例print大法演示功能通俗易懂。学pymongo库看一篇就够
⭐ 简介:大家好,我是zy阿二,我是一名对知识充满渴望的自由职业者. ☘️ 最近我沉溺于Python的学习中.你所看到的是我的学习笔记. ❤️ 如果对你有帮助,请关注我,让我们共同进步.有不足之处请留 ...
- python爬虫实战:利用scrapy,短短50行代码下载整站短视频
近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...
- mongdb学习笔记
mongodb学习资源:https://www.runoob.com/mongodb pymongo基本语法 1. 查看所有数据库 $ ./mongo MongoDB shell version: 3 ...
- python软件设计数据分析统计服_Python 和 R 数据分析/挖掘工具互查
写在前面 在此总结一些在数据分析/挖掘中可能用到的功能,方便大家索引或者从一种语言迁移到另一种.当然,这篇博客还会随时更新(不会另起一篇,为了方便大家索引),请大家如果有需要收藏到书签中. 如果大家还 ...
最新文章
- 快速提升网站收录量的技巧有哪些?
- 书评:Just the Computer Essentials(Vista)
- airtest web 录制滑块_Airtest之web自动化(一)
- 用jquery选取表行
- Redis应用场景汇总
- pytorch从dataframe中提取信息,变为可训练的tensor
- 如何安装以及配置jdk8的环境变量(建议收藏)
- UEditor 之初体验后记
- 32线性空间06——行空间和左零空间
- [原创]Datagrid和Button控件
- 03 - 雷达的基本组成
- python 更新pip报错 解决方法大全
- 1t98cp.com main.php,SCTF2019 Writeup——De1ta
- 浅谈文字编码和Unicode(中)[转]
- java孙正英_JavaSE23-函数式接口Stream流
- pve安装黑群晖直通硬盘_PVE系列二:安装黑群晖DSM系统
- SVN常用命令集合_艾孜尔江撰
- HTML、CSS、JavaScript学习总结
- title显示不全的处理方法
- 基于SG90舵机(伺服电机)的操作笔记
热门文章
- 过一下hibernate4-3
- 东北大学计算机难度,东北大学考研难度
- iOS拍摄视频,自定义拍摄界面,高清压缩,添加水印
- 分布式消息队列RocketMQ与Kafka的18项差异之“拨乱反正“之2
- Java学习之路1——安装JDK1.8||安装idea2022||Java项目创建【重拾Java】
- 定时计数器c语言编程,定时计数器T0作定时应用技术(一)
- 新年第一帖——元旦这天骑车迷路了
- 山地自行车系统的组成部分及论如何自己组装一台山地车
- sqlserver 根据日期计算年龄问题
- 转转二手交易平台建设高效率循环经济链