MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html)

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

MongoDB 将数据存储为一个文档,数据结构由键值对(key=>value)组成,类似于 JSON 对象。

MongoDB 属于NoSQL,NoSQL即Not Only SQL,意思是"不仅仅是SQL",泛指非关系型数据库。

(关系数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别请见:https://www.cnblogs.com/HuZihu/p/10233242.html)

MongoDB的一些基本术语

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins   表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

使用Python操作MongoDB

接下来我们用python来操作MongDB,首先需要安装PyMongo库(pip install pymongo)。

连接MongoDB:

import pymongo
client=pymongo.MongoClient(host='localhost',port=27017)

注:

host为指定的连接服务器的地址,设置为'localhost'代表连接到本地的MongoDB服务上

port为指定的端口,如果不填,默认为27017

查看MongoDB中的所有数据库:

dblist=client.list_database_names()

结果显示现有3个数据库:

['admin', 'config', 'local']

创建或指定数据库:

db=client['HuziHu']

(注:在MongoDB中,数据库只有在内容插入后才会创建)

创建或指定集合:(集合类似于关系型数据库中的表格)

collection=db['Xiaoyugan']

(注:在MongoDB中,集合只有在内容插入后才会创建)

查看指定数据库中的所有集合:

collist=db.list_collection_names()

插入数据:(我们可以自行指定每条数据的id--"_id";如果我们在插入数据时没有指定 _id,那么MongoDB 会为每条数据添加一个唯一的id。)

插入单条数据:insert_one()

yugan={"Name":"Xiaoyugan", "Type":"", "Flavor":"Spicy","Num":,"Comment":"Don\'t like it.Too hot!"}
collection.insert_one(yugan)

注:insert_one()方法返回InsertOneResult对象,该对象包含 inserted_id 属性,它是插入数据的id值。

插入多条数据:insert_many()

yugan=[{"Name":"Xiaoyugan", "Type":"", "Flavor":"Spicy","Num":,"Comment":"Don\'t like it.Too hot!"},
{"Name":"Xiaoyugan", "Type":"", "Flavor":"Sweet","Num":,"Comment":"Don\'t like it.Too sweet!"},
{"Name":"Xiaoyugan", "Type":"", "Flavor":"Fish","Num":,"Comment":"liked it."}]
collection.insert_many(yugan)

注:insert_many()方法返回InsertManyResult对象,该对象包含 inserted_ids 属性,该属性保存着所有插入数据的id值。

查看数据的id值:xx.inserted_id(对于单条数据)

                            xx.inserted_ids(对于多条数据)

查看指定集合中的所有数据:

for i in collection.find():
print(i)

查询数据:

查询单条数据:find_one(...)   ---返回符合查询条件的第一条结果,如果没有符合查询条件的结果,那么返回None

query={"Type":""}

print(collection.find_one(query))

结果:

{'_id': ObjectId('5c330ea47eb8d621f8d0a351'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Fish', 'Num': , 'Comment': 'liked it.'}

查询所有数据:find(...)   ---返回符合查询条件的所有结果,如果没有符合查询条件的结果,那么返回None

query={"Type":""}

for i in collection.find(query):
print(i)

结果:

{'_id': ObjectId('5c330ea47eb8d621f8d0a351'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Fish', 'Num': , 'Comment': 'liked it.'}
{'_id': ObjectId('5c330f6e7eb8d621f8d0a355'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Fish', 'Num': , 'Comment': 'liked it.'}
{'_id': ObjectId('5c330f857eb8d621f8d0a359'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Fish', 'Num': , 'Comment': 'liked it.'}

查询条件可以使用修饰符:

符号

含义

语法

$lt

小于

{field: {'$lt': value} }

$gt

大于

{field: {'$gt': value} }

$lte

小于等于

{field: {'$lte': value} }

$gte

大于等于

{field: {'$gte': value} }

$ne

不等于

{field: {'$ne': value} }

$in

在范围内

{field: {'$in': [ <value1>, <value2> ... <valueN> ]} }

$nin

不在范围内

{ field: { '$nin': [ <value1>, <value2> ... <valueN> ]} }

$and

和

{ '$and': [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }

$or

或

{ '$or': [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

$not

不是

 { field: { '$not': { <operator-expression> } } }

此外,查询还可以使用一些功能符号:

符号

含义

示例

示例含义

$regex

匹配正则表达式

{'name': {'$regex': '^M.*'}}

name以M开头

$exists

属性是否存在

{'name': {'$exists': True}}

name属性存在

$type

类型判断

{'age': {'$type': 'int'}}

age的类型为int

$mod

数字模操作

{'age': {'$mod': [5, 0]}}

年龄模5余0

$text

文本查询

{'$text': {'$search': 'Mike'}}

text类型的属性中包含Mike字符串

$expr

使用聚合表达式

{ '$expr': {'$gt':['$fans_count', '$follows_count']} }

粉丝数大于关注数

对查询条件更多的说明请见官方文档:https://docs.mongodb.com/manual/reference/operator/query/。

限制返回查询结果的条数:limit(...)

query={"Comment":{"$regex":"^Don"}}

for i in collection.find(query).limit(2):
print(i)

结果:

{'_id': ObjectId('5c330d667eb8d621f8d0a34d'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Spicy', 'Num': , 'Comment': "Don't like it.Too hot!"}
{'_id': ObjectId('5c330ea47eb8d621f8d0a34f'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Spicy', 'Num': , 'Comment': "Don't like it.Too hot!"}

统计查询结果的条数:count_documents(...)

query={"Type":""}

print(collection.count_documents(query))

对查询结果进行排序:sort(...)

for i in collection.find().sort('Num', pymongo.ASCENDING):
print(i)

注:pymongo.ASCENDING为升序,pymongo.DESCENDING为降序。

更新数据:

更新单条数据: update_one(..., ...)   --- 修改符合查询条件的第一条数据

query={'Flavor': 'Spicy'}
newvalue={"Flavor":"Hot"} collection.update_one(query,{'$set':newvalue})

更新多条数据: update_many(..., ...)   --- 修改符合查询条件的所有数据

query={}
newvalue={'Num':1} collection.update_many(query,{'$inc': newvalue})

注:返回结果是UpdateResult类型,分别调用matched_count和modified_count属性,可以获得匹配的数据条数和影响的数据条数。

 

一些常用的更新操作符:

符号

含义

$rename

重新命名字典的键

$set

设置字典的值

$unset

去除字典的键

$inc

增加字典的值

$setOnInsert

对已有的数据不更新,只插入原本不存在的数据

删除数据:

删除单条数据: delete_one(...)   --- 删除符合查询条件的第一条数据

删除多条数据: delete_many(...)   --- 删除符合查询条件的所有数据

from bson.objectid import ObjectId

collection.delete_many({'_id':{'$gt':ObjectId('5c330f857eb8d621f8d0a359')}})

删除_id大于ObjectId('5c330f857eb8d621f8d0a359')的数据。

注:

删除数据返回的结果都是DeleteResult类型,可以调用deleted_count属性获取删除数据的条数。

delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中所有的文档。

对集合重新命名: rename()

collection.rename('Yu')

删除集合:

collection.drop()

删除数据库:

client.drop_database('HuziHu')

对集合的更多操作可参见官方文档:http://api.mongodb.com/python/current/api/pymongo/collection.html。

使用Python操作MongoDB的更多相关文章

  1. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

  2. python操作mongodb

    # python操作mongodb # 首先,引入第三方模块pymongo,该模块是python用来操作mongodb的 import pymongo # 第二步,设置ip地址,以及表格名称,表格名字 ...

  3. python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战

    python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...

  4. python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用

    python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...

  5. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  6. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用

    python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...

  7. MongoDB的安装与python操作MongoDB

    一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...

  8. python 操作mongoDB数据库

    网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...

  9. 【转】Python操作MongoDB

    Python 操作 MongoDB   请给作者点赞--> 原文链接 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面 ...

随机推荐

  1. 分享基于 websocket 网页端聊天室

    博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...

  2. .Net移动开发平台 ,基于VisualStudio的可视化开发——Smobiler平台入门教程

    通过以下步骤,可以简单了解到如何下载Smobiler Designer(设计器).Client(客户端),以及如何通过设计器进行开发和调试移动应用,并在服务端部署.Cloud打包.访问您所开发的移动应 ...

  3. JVM的总结

    1.JVM的内存模型 JVM主要由程序计数器,虚拟机栈,堆,方法区,本地方法区 1.程序计数器的功能是记录当前线程执行到了字节码文件的哪一行, JVM执行的是.java编译后的.class文件 2.虚 ...

  4. .net基础系列

    这里汇总了.net基础的相关文章,方便查阅! .net基础 委托(1)认识委托 委托(2).net 1.x中的委托 委托(3).net 2.0中的委托 委托(4).net 3.5中的委托 委托(5)委 ...

  5. java的设计模式 - 单例模式

    java 面试中单例模式基本都是必考的,都有最推荐的方式,也不知道问来干嘛.下面记录一下 饿汉式(也不知道为何叫这个名字) public class Singleton { private stati ...

  6. Dynamics 365-CRM又报看不懂的错误了

    在CRM上执行各种操作,时不时会碰到各种问题,尤其是CRM环境里包含越来越多定制的时候.有的问题在CRM弹出的错误提示框,一目了然:而有的,可能就是简单的提示:SQL Error. 这个时候我们可能都 ...

  7. 华为7.0系统最简单激活xposed框架的流程

    对于喜欢搞机的哥们而言,很多时候会接触到Xposed框架及其种类繁多功能无敌的模块,对于5.0以下的系统版本,只要手机能获得root权限,安装和激活Xposed框架是异常简易的,但随着系统版本的不断更 ...

  8. 导入虚拟机vmware,此主机支持Intel VT-x,但Intel VT-x处于禁用状态和黑屏

    解决方法:进入BIOS(按什么键进入bios,需要看你用什么电脑),把Intel Virtualization Technology         设置enabled 然后是黑屏解决方法:管理员模式 ...

  9. Keepalibed监控nginx

    配置Keepalived监控nginx --wang 目的: 通过Keepalived实现对nginx的监控,每两秒扫描一次,如果nginx关闭,尝试重启nginx,两秒后检查nginx是否启动,如果 ...

  10. Java:全局变量(成员变量)与局部变量

    分类细则: 变量按作用范围划分分为全局变量(成员变量)和局部变量 成员变量按调用方式划分分为实例属性与类属性 (有关实例属性与类属性的介绍见另一博文https://blog.csdn.net/Drag ...