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相关推荐

  1. pymongo的使用

    mongodb pymongo 增 mongo.db.c_juzi.insert_one(var) 删 mongo.db.c_juzi.delete_one({'uuid': uuid_str}) 改 ...

  2. aspen和python一起使用_python-将$cond语句与$project一起使用并在PyMongo中聚合

    我想使用pymongo基于条件逻辑语句来投影一个新字段. 如果"状态"字段为"成功结束"或"成功进行中",则该值应等于1.我尝试通过在$co ...

  3. MongoDB与MySQL的插入、查询性能测试

    转载自:http://blog.csdn.net/clh604/article/details/19608869 1.1  MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地 ...

  4. Django项目连接MongoDB的三种方法

    有三种方法连接Django到MongoDB数据库 1.PyMongo:PyMongo 是 MongoDB 与 Django 交互的标准驱动程序.这是在 Python 中使用 MongoDB 的官方和首 ...

  5. python进阶-MongoDB

    目录 Python MongoDB MongoDB PyMongo 测试 PyMongo 一.Python MongoDB 创建数据库 1.创建数据库 2.检查数据库是否存在 二.Python Mon ...

  6. Mongdb篇三。 用Python代码实现Mongdb数据库的增删查改、集合管道示例,超详细,全部用实例print大法演示功能通俗易懂。学pymongo库看一篇就够

    ⭐ 简介:大家好,我是zy阿二,我是一名对知识充满渴望的自由职业者. ☘️ 最近我沉溺于Python的学习中.你所看到的是我的学习笔记. ❤️ 如果对你有帮助,请关注我,让我们共同进步.有不足之处请留 ...

  7. python爬虫实战:利用scrapy,短短50行代码下载整站短视频

    近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...

  8. mongdb学习笔记

    mongodb学习资源:https://www.runoob.com/mongodb pymongo基本语法 1. 查看所有数据库 $ ./mongo MongoDB shell version: 3 ...

  9. python软件设计数据分析统计服_Python 和 R 数据分析/挖掘工具互查

    写在前面 在此总结一些在数据分析/挖掘中可能用到的功能,方便大家索引或者从一种语言迁移到另一种.当然,这篇博客还会随时更新(不会另起一篇,为了方便大家索引),请大家如果有需要收藏到书签中. 如果大家还 ...

最新文章

  1. 快速提升网站收录量的技巧有哪些?
  2. 书评:Just the Computer Essentials(Vista)
  3. airtest web 录制滑块_Airtest之web自动化(一)
  4. 用jquery选取表行
  5. Redis应用场景汇总
  6. pytorch从dataframe中提取信息,变为可训练的tensor
  7. 如何安装以及配置jdk8的环境变量(建议收藏)
  8. UEditor 之初体验后记
  9. 32线性空间06——行空间和左零空间
  10. [原创]Datagrid和Button控件
  11. 03 - 雷达的基本组成
  12. python 更新pip报错 解决方法大全
  13. 1t98cp.com main.php,SCTF2019 Writeup——De1ta
  14. 浅谈文字编码和Unicode(中)[转]
  15. java孙正英_JavaSE23-函数式接口Stream流
  16. pve安装黑群晖直通硬盘_PVE系列二:安装黑群晖DSM系统
  17. SVN常用命令集合_艾孜尔江撰
  18. HTML、CSS、JavaScript学习总结
  19. title显示不全的处理方法
  20. 基于SG90舵机(伺服电机)的操作笔记

热门文章

  1. 过一下hibernate4-3
  2. 东北大学计算机难度,东北大学考研难度
  3. iOS拍摄视频,自定义拍摄界面,高清压缩,添加水印
  4. 分布式消息队列RocketMQ与Kafka的18项差异之“拨乱反正“之2
  5. Java学习之路1——安装JDK1.8||安装idea2022||Java项目创建【重拾Java】
  6. 定时计数器c语言编程,定时计数器T0作定时应用技术(一)
  7. 新年第一帖——元旦这天骑车迷路了
  8. 山地自行车系统的组成部分及论如何自己组装一台山地车
  9. sqlserver 根据日期计算年龄问题
  10. 转转二手交易平台建设高效率循环经济链