Mongodb

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组,它是一种非关系的数据库Nosql。

那么非关系带来的一个问题就是,耗存储空间,就比如10000条数据,每条数据都有一条是一样的,那么在关系型数据库的情况下,我们就可以直接使用外键的方式来进行存储,那么对于mongodb这样的非关系型数据库就需要每一条数据都进行存储,带来一定的资源浪费;

在关系型数据库下,扩展性比较差,如果我们开始定义了一些数据,后期想要改起来非常麻烦,而且在大数据下IO比较大,因为我们要查询一条数据出来可能需要连很多表才能把这个数据给完整展现出来。那对Mongodb来说,它解决这个问题就非常简单,因为它是菲关系的,数据和数据之间没有任何关联,不涉及到连表查询,同时打来的好处就是速度快,灵活性比较好,不需要预先为表做字段,直接插即可;

Mongodb优势

易扩展性:NoSQL数据库种类繁多,但是一个共同的特点就是去掉关系型数据库的关系特性,数据之间无关系,这样就非常易于扩展;

性能高:在大数据量的情况下表现优秀,NoSQL数据库都具有非常搞的读写性能,尤其是在大数据量下,这得益于它的无关系性,数据库结构简单;

灵活性:NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系型数据库里,增删字段是一见非常麻烦的事情;

基础命令

管理

管理包含数据备份和恢复;

备份

mongodump -h dbHost -d dbName -o backupDir

恢复

mongorestore -h dbHost -d dbName --dir backupDir

数据库命令

show dbs:查看库;

use:切换数据库;

db:查看当前数据库;

db.dropDatabase():删除当前数据库;

集合命令

show collections:查看当前数据库的所有集合;

db.集合名称.drop():删除集合;

db.createCollection("cce"):创建一个集合;

存储的数据

Object ID:文档ID;

每个文档都有一个_id,保证文档的唯一性,如果没有显示定义,那么mongodb会自动生成;

Sting:字符串,必须是有效的utf8;

Boolean:存储一个布尔类型,true或false;

Integer:整形可以是32位或者64位;

Double:存储浮点数;

Arrays:数组或者列表,多个值存储到一个文档;

Object:用于嵌入式的文档,即一个值为一个文档;

Null:存储null值;

Timestamp:时间戳;

Date:存储当前时间或者时间的unix格式;

创建日期的语句:new Date('2018-01-15') # 需要传入一个时间;

数据查询

db.集合名称.find():查找指定的数据,如果没有给定查询条件,默认查询所有, db.caichangen.find({"age":18})这是一个给定条件的示例;

数据增加

db.caichangen.insert({"name":"cce","age":18}) # 增加一条数据{"name":"cce","age":18}) # 如果数据已存在那么会抛出错误;

db.caichangen.save({"name":"cce","age":18}) # 增加一条数据{"name":"cce","age":18}) # 如果已存在就更新,如果不存在那么就插入;

数据更新

语法:db.集合名称.update(,,{multi:})

更新一条数据:db.caichangen.update({},{age:30}) | db.caichangen.update({},{$set:{age:30}})

条件更新:db.caichangen.update({age:20},{age:30})

批量更新:db.caichangen.update({age:20},{$set:{age:30}},{multi:true})

数据删除

语法:db.集合名称.remove(,{justOne:})

query:查询条件;

justOne:布尔值,为true删除一条,默认false删除所有数据;

删除匹配条件的所有:db.caichangen.remove({age:30},{justOne:false})

高级查询

find:查询,可以在后面加上pretty()将结果格式化;

findOne:查询,返回第一个集合,可以在后面加上pretty()将结果格式化;

比较运算符

等于:默认是等于判断,没有运算符;

$lt:小于;

$lte:小于等于;

$gt:大于;

$gte:大于等于;

$ne:不等于;

语法:db.caichangen.find({age:{$lt:18}})

范围运算符

$in:是否在某个范围内;

$nin:是否在某个范围内;

语法:db.caichangen.find({age:{$in:[18,19]}})

或者

and:并且;

$or:值为数组,数组中每个元素为json;

语法:db.caichangen.find({$or:[{age:18},{name:"cce"}]})

查询姓名为cce或者cfj并且年龄是18的:db.caichangen.find({$or:[{name:"cfj"},{name:"cce"}],age:18})

正则表达式

使用//或者$regex编写正则表达式;

语法:

db.caichangen.find({name:/^c/})

db.caichangen.find({name:{$regex:'e$'}})

常用方法

limit:限制返回指定数量的文档;

db.caichangen.find().limit(Number)

skip:用于跳过指定数量的文档;

db.caichangen.find().skip(Number)

同时使用:

db.caichangen.find().limit(Number).skip(Number)

自定义查询

使用$where后面写一个函数,返回满足条件的数据;

示例:

db.caichangen.find({$where:function(){return this.age>30;}})

返回指定的字段

语法:db.集合名称.find({},{字段:0/1}) # 0不显示,1显示;

示例:

db.caichangen.find({name:{$regex:'e$'}},{age:1,_id:0})

排序

sort:sort可以在返回结果集后进行排除处理,传入一个1或者-1,1升序,-1降序;

示例:

db.caichangen.find().sort({age:1})

统计

count:可以对结果集进行统计,也可以直接统计集合;

示例:

db.caichangen.find().count()

db.caichangen.count({age:{$gt:20}})

去重

distinct:可以对结果集进行去重;

语法:

db.集合名称.distinct('去重字段':{条件})

示例:

db.stu.distinct('age':{age:{$gt:18}})

索引

建立索引提升查询速度,默认情况下mongodb会自动将_id字段设置为索引;

创建索引

单利索引

测试:插入10万条数据到数据库中

for(var i=0;i<100000;i++){db.caichangen.insert({name:"cce"+i,age:i})}

测试:

db.caichangen.find({'name':'cce10000'}) # 测试查询

db.caichangen.find({'name':'cce10000'}).explain('executionStats') # 查看上面查询语句的执行状态信息,executionTimeMillis是查询时间;

创建索引:

语法:db.集合名称.ensureIndex({属性:1/-1}) # 1表示升序,-1表示降序,-1的使用场景是经常使用sort来操作数据;

示例:db.caichangen.ensureIndex({name:1})

联合索引

语法:db.集合名称.ensureIndex({属性:1/-1,属性:1/-1})

删除索引

语法:db.集合名称.dropIndex('索引名称')

查看索引

语法:db.集合名称.getIndexs()

Python操作Mongodb

安装:pip install pymongo

from pymongo import MongoClient

client = MongoClient(host='192.168.1.254', port=27017) # 初始化一个client对象,拿到一个连接初始化信息

collection = client['cce']['caichangen'] # 指定要连接的库和集合

# 清空数据库

collection.drop()

# 插入单条数据

date = {"_id": 1, "name": "cce0", "age": 100}

collection.insert(date)

# 插入多条数据

data_many=[{"name": "name" + str(1000+i), 'age': i} for i in range(10)] # 创建数据

collection.insert_many(data_many) # 多条插入

# 查询所有数据

result=collection.find({'name':'cce0'}) # 返回一个游标对象,它是一个可迭代对象,当游标走到最后的时候那么就获取不到数据了,和我们的生成器一样;

for i in result:

print(i)

# 查询一条数据

result=collection.find_one({'name':'cce0'})

print(i)

# 更新一条数据

collection.update_one({'name':'cce0'},{"$set":{'name':'caichangen'}})

# 更新所有数据

collection.update_many({'name':'cce0'},{"$set":{'name':'caichangen'}})

连接副本集

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

# @Time : 2020/5/23 23:07

# @Author : CaiChangEn

# @Email : mail0426@163.com

# @Site : https://blog.doorta.com

# @Software: PyCharm

from pymongo import MongoClient

client = MongoClient(['172.16.1.1:27017','172.16.1.2:27017','172.16.1.3:27017'])

collection = client['cce']['students']

print(collection.find_one())

mongodb python 大于_5、Python操作MongoDB相关推荐

  1. java mongodb 增删改查_java操作mongodb:基本的增删改查

    java操作mongodb的代码,包含基本的增删改查操作 获取数据库连接工具类 package com.liuc.db;import java.net.UnknownHostException;imp ...

  2. mongodb python 大于_Python中使用MongoDB详解

    作者:Zarten知乎专栏:Python爬虫深入详解知乎ID: Zarten简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 ! 介绍 MongoD ...

  3. mongodb php代码实例,php操作mongoDB实例分析

    本文实例讲述了PHP操作mongoDB的方法.分享给大家供大家参考.具体分析如下: mongoDB数据库是一种以json格式存储的数据库,非常适用于各种应用开发,这里就来给各位朋友介绍一些mongoD ...

  4. java mongodb开发_Java Tutorial:Java操作MongoDB入门

    [IT168 技术]个人编译能力有限,以下提供英汉对照,欢迎讨论指正. Introduction 介绍 This page is a brief overview of working with th ...

  5. 【MongoDB for Java】Java操作MongoDB

    软件151--熊佳杨 开发环境: System:Windows IDE:eclipse.MyEclipse 8 Database:mongoDB 开发依赖库: JavaEE5.mongo-2.5.3. ...

  6. mongodb for java_【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  7. python下使用pymongo操作mongodb

    为什么80%的码农都做不了架构师?>>>    Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐. Mon ...

  8. Python3操作MongoDB数据库

    Python3操作MongoDB数据库 文章目录 Python3操作MongoDB数据库 0. 写在前面 1. 安装开源驱动库pymongo 2. 参考 0. 写在前面 Linux:Ubuntu Ky ...

  9. SpringBoot 集成 Spring Data Mongodb 操作 MongoDB 详解

    一.MongoDB 简介 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,且与关系数据库的最为相像的.它支持的数据结构非常松散,是类似 json 的 bso ...

最新文章

  1. SAP CRM AXT Genil handler
  2. .net mysql 特殊字符转义字符_MySQL 特殊字符转义问题
  3. java微信支付代码_Java微信支付之服务号支付代码示例
  4. 《别做正常的傻瓜》读书笔记
  5. js小学生图区_js实现图片区域可点击大小随意改变(适用移动端)代码实例
  6. 01.php面向对象
  7. JAVA SE、JAVA EE、JAVA ME的联系与区别
  8. 苹果电脑mp3转gif_用苹果电脑做gif动图的方法终于找到了...
  9. 37 一次获取redis连接阻塞引起的 Thread pool is EXHAUSTED
  10. 小米机器人虚拟墙设置_大家都有就它独缺,姗姗来迟的虚拟墙方案终更新,小米扫地机器人...
  11. vue项目的导出功能
  12. 两电脑使用网线连接传文件方法
  13. 深度学习与AI入门——追风记
  14. alook浏览器哪个好 夸克浏览器_简单搜索、X浏览器、夸克浏览器、Via极简移动浏览器,到底哪个最好用?...
  15. Windows下清理redis缓存
  16. knockout js之select
  17. Cannot render error page for request [/xxx/xxx/xxx] and exception [nested exception is org.apache.
  18. 【竞品分析】小睡眠APP和蜗牛睡眠APP,基于用户体验5要素的分析框架
  19. JAVA解析TDMS文件
  20. eyeOS2.5安装,试用

热门文章

  1. 抓包工具-charles安装过程
  2. dj鲜生-33-用户中心-左侧链接与样式的完成
  3. python环境配置-windows版
  4. redis中文显示问题
  5. 【教程】条形码组件Spire.Barcode 教程:如何在C#中创建DataMatrix条码
  6. centsos7修改主机名 [root@st152 ~]# cat /etc/hostname
  7. 软件工程----8面向对象设计
  8. 谈谈JS里的{ }大括号和[ ]中括号的用法
  9. php使用http请求头实现文件下载
  10. S5700日志查看与清空