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