Python MongoDB使用初步

梦想与她 提交于 2020-10-14 16:44:53

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。它是一个面向文档存储的数据库,操作起来比较简单。可通过本地或者网络创建数据镜像,具有很强的可扩展性。MongoDB 支持的编程语言有Ruby,Python,Java,C++,C#,PHP等。本文以Windows平台为例,介绍Windows下MongoDB的安装和使用方法。

 

1 安装MongoDB

进入MongoDB官网,https://www.mongodb.com/download-center/community ,如下图

从右侧下载栏目中找到windows平台,version选择最新即可。下载后双击打开进入安装步骤,可以自定义安装路径,如果不想安装在默认的C盘,可以自定义到D盘或者E盘等。在安装中有一个默认安装MongoDB compass的选项,一般我们不需要用GUI来管理,所以可以去掉勾选。

安装完成后,需要为MongoDB手动创建数据存储目录。这个数据目录需要放在根目录下(如C:\和D:\)。如果程序安装在了D盘,那么我们就在D盘根目录创建一个data文件夹,在data文件夹中继续创建一个db文件夹,这样就有了一个数据目录“D:\data\db”。

 

2 运行MongoDB服务器

要使用MongoDB,需要先将服务器运行起来。在第一步中已经安装好了MongoDB,那么我们要通过命令行(使用cmd或者windows powershell)进入到安装目录下的工具箱

Your_Path_To_MongoDB\MongoDB\Server\4.2\bin。例如我自己的安装路径为D:\Program Files\MongoDB\Server\4.2\bin。

然后运行.\mongod.exe --dbpath d:\data\db

如果没有报错则运行成功。有的时候MongoDB安装完了提示需要重启才能使用,那么可以在安装完之后先重启机器。

关于端口问题,网上有些同学说连接MongoDB失败,那可能是因为使用了不同的端口去连接。MongoDB在自己的配置文件(mongod.cfg)中默认配置了监听端口为27017,所以如果你希望使用别的端口可以在配置文件中更改,也可以使用 “--port 端口号” 来指定端口。

 

3 使用Python操作数据库

Python需要通过PyMongo这个库来实现与MongoDB的连接。建议使用Python3自带的pip包管理工具来安装pymongo。

pip3 install pymongo

安装完之后,在python环境中使用 import pymongo 来测试安装是否成功。

一些常用的命令如下:

 

(1) 创建数据库

创建数据库需要使用MongoClient对象

#!/usr/bin/python3

import pymongo

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

mydb = myclient["testdb"]

MongoDB数据库只有在插入数据后才会真正创建。也就是说数据库创建集合(数据表)后,必须再插入一个文档(记录),数据库才创建完成。

判断数据库是否已经存在:

dblist = myclient.list_database_names()

if "testdb" in dblist:

    print("testdab has already existed!")

(2) 创建集合

mycol = mydb["mycollection"]

判断集合是否已经存在:

collist = mydb. list_collection_names()

if " mycollection " in collist:

    print("mycollection existed!")

 

(3) 添加数据

在集合中插入一个文档(记录)的方法如下:

mydict = {"name": "jack"}

x = mycol.insert_one(mydict)

如果没有指定 “_id”的值,会默认添加一个 '_id': ObjectId('5ee6e728228cbb51bb416a1c'),它是插入文档的 “_id” 值在没有指定 “_id”时候,MongoDB 会为每个文档添加一个唯一的 id所以一般可以自己指定这个“_id”的值。

插入多个文档的方法如下:

mydict = [{ "name": "jack" }, {"name": "lucy"}]

x = mycol.insert_many(mydict)

指定_id输入方法:

mydict = [{ "_id": "1", "name": "jack" }, {"_id": "2", "name": "lucy"}]

x = mycol.insert_many(mydict)

(4) 查询数据

查询第一条数据:

x = mycol.find_one()

查询所有数据:

for x in mycol.find():

    print(x)

使用find()查询指定字段的数据

for x in mycol.find({},{ "_id": 0, "name": 1}):

    print(x)

根据条件查询:

myquery = { "name": "lucy" }

mydoc = mycol.find(myquery)

for x in mydoc:

    print(x)

还可以通过对查询条件进行设置来实现高级查找。此处不再赘述。

如果要设置指定条数的记录,可以这样,只返回10条记录

myresult = mycol.find().limit(10)

 

(5) 修改数据

使用update_one()可以修改一个文档

myquery = { "name": "jack" }

newvalues = { "$set": { "name": "12345", "age": "12"  } }

mycol.update_one(myquery, newvalues)

update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()。下面这个命令是将所有“name”字段以“l”开头的文档中的“age”设置为“23”。

myquery = { "name": { "$regex": "^l" } }

newvalues = { "$set": { "age": "23" } }

x = mycol.update_many(myquery, newvalues)

 

(6) 数据排序

按照“_id”升序排列:

mydoc = mycol.find().sort("_id")

按照“_id”降序排列:

mydoc = mycol.find().sort("_id", -1)

 

(7) 删除数据

删除一个文档:

myquery = { "name": "jack" }

mycol.delete_one(myquery)

删除多个“name”字段以“N”开头的文档:

myquery = { "name": {"$regex": "^N"} }

x = mycol.delete_many(myquery)

 

4 总结

使用数据库操作文档数据,实现更加复杂的系统功能。本文只介绍了一些初步的操作知识,更加多的操作可以参考一些在线文档。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!