最容易看懂的mongodb数据库

python之mongodb学习


1.首先,先来介绍一下mongdb数据库

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

主要特点:

MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
mongodb与mysql命令对比 传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,

我们简单来说硕Mongodb的特点:
MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。

MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。


2.安装使用mongodb数据库
安装的话,大家自行百度就ok了!!!
接下来我们开始使用mongodb
(1)引入pymongo并且建立连接

#引入模块
import pymongo
#建立连接(IP和端口)
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#myclient = pymongo.MongoClient("localhost",27017)

3.创建数据库
首先说明一下,mongodb不需要自己创建数据库,可以直接使用的,可以自动创建的。

#mydb = myclient["test"]
#两种方式都可以
mydb = myclient.test

4.创建集合
注意: 在 MongoDB 中,集合只有在内容插入后才会创建!也就是说,我们需要先创建集合(也就是数据表),再插入一条记录,数据表才会真正创建。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#创建数据库
mydb = myclient.testdb
#创建表
mycol = mydb.table

5.插入数据
有两种插入数据的方法:save() VS insert()
但两者是有两个区别:
一、save函数实际就是根据参数条件,调用了insert或update函数.如果想插入的数据对象存在,insert函数会报错,而save函数是改变原来的对象;如果想插入的对象不存在,那么它们执行相同的插入操作.
二、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,需要一个个插入。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#插入数据
mycol.insert({"name":'john','province':'浙江','age':24})

结果:


snipaste_20181113_064239.png

在MongoDB中,每条数据其实都有一个_id属性来唯一标识。如果没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性。insert()方法会在执行后返回_id值。
插入多条数据

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
              {"name":'wangsan','province':'西安','age':12},
              {"name":'lisi','province':'陕西','age':22},
              ])

结果:


snipaste_20181113_064915.png

上面利用insert演示,但是官方推荐使用insert_one()和insert_many()方法来分别插入单条记录和多条记录。


6.查询语句
插入数据后,可以利用find_one()或find()方法进行查询,其中find_one()查询得到的是单个结果,find()则返回一个生成器对象.
(1)查询单条语句find_one

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
              {"name":'wangsan','province':'西安','age':12},
              {"name":'lisi','province':'陕西','age':22},
              ])
resuit = mycol.find_one({"name":"wangsan"})
print(resuit);

结果:

{'_id': ObjectId('5bea02f229b57602d039f4eb'), 'name': 'wangsan', 'province': '西安', 'age': 12}

(2)查询多条我们可以使用find语句

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
              {"name":'wangsan','province':'西安','age':20},
              {"name":'lisi','province':'陕西','age':20},
              ])
resuit = mycol.find_one({"name":"wangsan"})
print(resuit);
#查找多条
results = mycol.find({"age":20})
print(results)
for result in results:
    print(result)

结果:

{'_id': ObjectId('5bea02f229b57602d039f4eb'), 'name': 'wangsan', 'province': '西安', 'age': 12}
<pymongo.cursor.Cursor object at 0x00000000027504A8>
{'_id': ObjectId('5bea05e629b5761010ddd735'), 'name': 'wangsan', 'province': '西安', 'age': 20}
{'_id': ObjectId('5bea05e629b5761010ddd736'), 'name': 'lisi', 'province': '陕西', 'age': 20}

7.更新删除
更新update

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#更新name
mycol.update({'name':'john'},{'$set':{"name":"30"}})
#检查是否更新
result = mycol.find_one({"name":"30"})
print(result)

结果:

{'_id': ObjectId('5be8c5b229b5760440220de3'), 'name': '30', 'province': '浙江', 'age': 24}

删除remove

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#删除
mycol.remove({"name":"30"})
#检查
result = mycol.find_one({"name":"30"})
print(result)

其他也可以参考:https://juejin.im/post/5addbd0e518825671f2f62ee

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,790评论 2 89
  • 一、MongoDB简介 概述MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供...
    未央_m阅读 707评论 0 1
  • 一、MongoDB简介 概述MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供...
    王梓懿_1fbc阅读 469评论 0 3
  • 一、MongoDB简介 概述MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供...
    EndEvent阅读 1,149评论 1 4
  • 在薛之谦高调复合之后,李雨桐发了一剂深水炸弹,把薛之谦的深情人设击碎无余,薛的渣男人设坐实,渣属性标签日后恐怕是撕...
    司无伏阅读 235评论 0 0