mongodb基本操作

1.数据库操作

1.新建数据库

use DATABASE NAME

use:用于切换/创建数据库,若不存在则创建,否则切换到指定数据库。DATABASE_NAME:数据库名称。

执行use articledb命令,创建数据库articledb。

2.查看数据库

 查看全部数据库

show dbs

或者查看当前数据库,需要先切换到指定数据库

db

3.删除数据库

db.dropDatabase()

db:表示当前数据库对象。

dropDatabase():用于删除当前数据库的方法。

删除当前数据库,执行命令前应使用use命令切换到要删除的数据库,为了防止误删可执行命令db验证当前数据库是否为指定删除的数据库。

2.集合操作

1.创建集合

显示创建

db.createCollection(COLLECTION NAME, [OPTIONS])

隐式创建

db.COLLECTION NAME.insert(DOCUMENT)

db:表示当前数据库对象。

createCollection():创建集合方法。DOCUMENT表示文档。

COLLECTION_NAME表示集合名称。OPTIONS表示集合配置。

insert():向集合中插入文档的方法。

2.删除集合

db:表示当前数据库对象。

COLLECTION_NAME:表示集合名称。drop():删除集合方法。

db.COLLECTION NAME.drop()

3.文档操作

1.单文档插入

db.COLLECTION NAME.insert(document)

或者

db.COLLECTION NAME.save(document)

2.多文档插入

db.COLLECTION NAME.insertMany([document1,document2,...])

db:当前数据库对象

COLLECTION_NAME:**当前集合对象。insert()和save():插入单文档方法。

insertMany():插入多文档方法。

insert()和save()方法的区别在于,若使用insert()方法插入文档时,集合中已存在该文档,则会报错。若使用save()方法插入文档时,集合中已存在该文档,则会覆盖。

3.文档更新

db:当前数据库对象。

COLLECTION_NAME:当前集合对象。update():更新文档方法。

criteria:更新的查询条件,类似sql中的where。

objNew:新的对象和操作符,类似sql中的set。

upsert:不存在更新对象时,是否插入,默认为false

multi:默认为false,只更新查找到的第一个文档,反之更新所有。

db.COLLECTION NAME.update(criteria,objNew,upsert, multi)

4.升级语法

db.集合名.update(条件, 新数据){修改器: {键:值}}

4.文档删除

1.删除单个

db.COLLECTION NAME.remove(

,

{

justOne: ,

writeConcern:

}

)

2.删除全部文档

db.COLLECTION NAME.remove({})

db:当前数据库对象。

COLLECTION_NAME:当前集合对象。remove():删除文档方法。

query:删除文档的条件,可选参数。

justOne:的boolean为true或1时,表示只删除查询出的第一个文档。writeConcern: 表示抛出异常级别。

3.文档简单查询

查询所有文档语法

db.COLLECTION NAME.find()

查询所有文档,以易读的方式展示

db:当前数据库对象

COLLECTION_NAME:当前集合对象

find():查询所有文档方法

pretty():格式化查询返回结果

db.COLLECTION NAME.find().pretty()

5.聚合查询

1.语法

db.集合名称.aggregate([

{管道:{表达式}}

....

])

其中“[]”不是必须的,可以省略!!!

6.索引优化

1.介绍 

MongoDB数据库提供了多样性的索引支持,因此可以提高查询集合中文档的效率。若是没有索引,MongoDB数据库必须执行全集合扫描(即扫描集合中的每一个文档),从而筛选出与查询条件相匹配的文档。这种扫描全集合的查询效率是非常低的,尤其是在处理海量数据时,执行查询操作需要花费几十秒甚至几分钟的时间,这无疑对网站的性能是非常致命的。若是执行查询操作时,集合中的文档存在适当的索引,MongoDB就可以使用该索引限制必须检查的文档数量。

 索引是一种特殊的数据结构,即采用B-Tree数据结构。索引是以易于遍历读取的形式存储着集合中文档的一小部分,文档的一小部分指文档中的特定字段或一/多组字段,并且这些字段均按照字段的值进行排序。索引项的排序支持有效的等值匹配和基于范围的查询操作。此外,MongoDB还可以使用索引中的排序返回排序的结果。

2.单字段索引

MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引,因此被称为单字段索引(SingleField Index)。默认情况下,MongoDB中所有集合在“_id”字段上都有一个索引,用户也可以根据自己的需求添加额外索引来支持重要的查询和操作。由于MongoDB可以从任何方向遍历索引,因此对于单个字段索引和排序操作来说,索引项的排序顺序(即升序或降序)并不重要。

3.复合索引

MongoDB除了支持单字段索引外,还支持复合索引。所谓复合索引,就是包含多个字段的索引,一个复合索引最多可以包含31个字段。需要注意的是,若某字段属于哈希索引,则这时复合索引就不能包括该字段。

4.多键索引

若文档中的字段为数组类型,则每个字段都是数组中的一个元素,MongoDB将会为数组中的每个元素创建索引,因此被称为多键索引(Multikey Index)。多键索引允许通过匹配数组的一个或多个元素来查询包含该数组的文档。如果索引字段包含数组值,则MongoDB会自动确定是否创建多键索引,而无需显式地指定创建多键索引。

5.查看索引

db.COLLECTION NAME.getIndexes()

6.查看索引大小

db.COLLECTION NAME.totalIndexSize()

7.创建索引

db.COLLECTION NAME.createIndex(keys,options)

keys:指定索引键及排序顺序,该参数值为文档类型,key用于指定索引键,value指定排序顺序,1为升序,-1为降序。

options:用于控制创建索引的选项,常见选项有unique和name,其中unique描述建立的索引是否唯一,默认为false。name描述所创建索引的名称,默认情况下MongoDB会通过连接索引的字段名和排序顺序生成一个索引名称。

8.删除索引

1.删除所有索引

db.COLLECTION NAME.dropIndexes()

2.删除单个索引

db.COLLECTION NAME.dropIndex(index)

参数index,其数据类型为字符串或文档,可用于指定要删除的索引.

9.API访问

1.通过python访问MongoDB

Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接。

1.pip 安装

pip 是一个通用的 Python 包管理工具,提供了对 Python 包的查找、下载、安装、卸载的功能。安装 pymongo:

pip install pymongo

也可以指定安装的版本:

pip install pymongo==3.5.1

更新 pymongo 命令:

pip install upgrade pymongo

2.创建数据库

创建数据库需要使用 MongoClient 对象,并且指定连接的 URL 地址和要创建的数据库名。如下实例中,我们创建的数据库 runoobdb :

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["runoobdb"]

注意: 在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。

3.判断数据库是否已存在

我们可以读取 MongoDB 中的所有数据库,并判断指定的数据库是否存在:

list_database_names()。

import pymongo

myclient = pymongo.MongoClient('mongodb://localhost:27017/')

dblist = myclient.list database names()

# dblist = myclient.database names()

if "runoobdb" in dblist:

print("数据库已存在!")

注意:database_names 在最新版本的 Python 中已废弃,Python3.7+ 之后的版本改为了

2.创建一个集合

MongoDB 使用数据库对象来创建集合,实例如下:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["runoobdb"]

mycol = mydb["sites"]

注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

1.判断集合是否已存在

我们可以读取 MongoDB 数据库中的所有集合,并判断指定的集合是否存在:

import pymongo

myclient = pymongo.MongoClient('mongodb://localhost:27017/')

mydb = myclient['runoobdb']

collist = mydb. list collection names()

# collist = mydb.collection names()

if "sites" in collist: # 判断 sites 集合是否存在

print("集合已存在!")

注意:collection_names 在最新版本的 Python 中已废弃,Python3.7+ 之后的版本改为了

list_collection_names()。

3.增、删、改、查等操作

1.Python Mongodb 插入文档

插入集合

集合中插入文档使用 insert_one() 方法,该方法的第一参数是字典 name => value 对。以下实例向 sites 集合中插入文档:import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["runoobdb"]mycol = mydb["sites"]

mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" }

x = mycol.insert one(mydict)

print(x)

2.返回 _id 字段

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

myclient = pymongo.MongoClient('mongodb://localhost:27017/')mydb = myclient['runoobdb']mycol = mydb["sites"]

mydict = { "name": "Google", "alexa": "1", "url": "https://www.google.com" }

x = mycol.insert one(mydict)

print(x.inserted id)

如果我们在插入文档时没有指定 _id,MongoDB 会为每个文档添加一个唯一的 id。