介绍
MongoDB是一个非关系型的文档数据库。与传统关系型数据库不同,MongoDB基于文档储存数据。文档是一种类似于JSON格式的文件,包含了键值对。MongoDB还支持动态查询、按照字段索引查询、排序等等一系列高级功能。Python是一种流行的编程语言,广泛应用于数据科学、机器学习、Web开发等领域。在Python中连接MongoDB数据库,可以利用pymongo库。
安装pymongo
Python中连接MongoDB数据库,需要pymongo库的支持。可以使用pip来安装pymongo。在控制台执行以下指令即可安装:
pip install pymongo
连接MongoDB
连接MongoDB需要指定主机名、端口号、用户名、密码等信息。默认情况下,MongoDB使用27017端口。在连接MongoDB之前,需要确保MongoDB已经启动。在控制台执行以下指令即可连接MongoDB:
# 导入pymongo库
import pymongo
# 连接MongoDB数据库
client = pymongo.MongoClient('localhost', 27017)
# 确认连接成功
print(client.list_database_names())
当控制台输出MongoDB中数据库的名称时,表示连接成功。
创建数据库和集合
在MongoDB中,类似于传统关系型数据库中的“数据库”和“表”,MongoDB中的单元是“数据库”和“集合”。创建数据库和集合十分简单。在控制台执行以下指令即可完成创建:
# 创建新的数据库
db = client["mydatabase"]
# 创建新的集合
coll = db["customers"]
其中,`mydatabase`是我们所创建的数据库名称,`customers`是我们所创建的集合名称。
插入文档
在MongoDB中,可以通过向集合中插入文档来存储数据。文档是一种类似于JSON格式的文件,包含了键值对。在Python中,可以使用pymongo库中的insert_one()方法向集合中插入单个文档。在控制台执行以下指令即可完成插入:
# 插入单个文档
doc = {"name": "John", "address": "Highway 37"}
x = coll.insert_one(doc)
# 打印新文档的ID
print(x.inserted_id)
以上指令将会向名为`customers`的集合中插入一条文档。文档内容为`{"name": "John", "address": "Highway 37"}`。插入完成之后,我们可以通过方法`inserted_id`获取新文档的唯一ID。
插入多个文档
在Python中,可以使用pymongo库中的insert_many()方法向集合中插入多个文档。在控制台执行以下指令即可完成插入:
# 插入多个文档
docs = [
{"name": "Amy", "address": "Apple st 652"},
{"name": "Hannah", "address": "Mountain 21"},
{"name": "Michael", "address": "Valley 345"},
{"name": "Sandy", "address": "Ocean blvd 2"},
{"name": "Betty", "address": "Green Grass 1"},
{"name": "Richard", "address": "Sky st 331"},
{"name": "Susan", "address": "One way 98"},
{"name": "Vicky", "address": "Yellow Garden 2"},
{"name": "Ben", "address": "Park Lane 38"},
{"name": "William", "address": "Central st 954"},
{"name": "Chuck", "address": "Main Road 989"},
{"name": "Viola", "address": "Sideway 1633"}
]
x = coll.insert_many(docs)
# 打印文档ID
print(x.inserted_ids)
以上指令将会向名为`customers`的集合中插入多条文档,每个文档包含了`name`和`address`两个键值对。插入完成之后,我们可以通过使用`inserted_ids`属性获取插入的文档ID列表。
查询文档
在MongoDB中,可以通过使用find()方法查询文档。Python中,可以使用pymongo库中的find()方法查询文档。在控制台执行以下指令即可完成查询:
# 查询所有文档
docs = coll.find()
# 输出所有文档
for doc in docs:
print(doc)
以上指令将会打印出名为`customers`的集合中所有的文档。可以通过解析输出的结果来查看每个文档中的键值对的值。
查询文档中的部分字段
在MongoDB中,可以通过使用投影(projection)来提取文档中的部分字段。Python中,可以使用pymongo库中的find()方法和投影参数来提取文档中的部分字段。在控制台执行以下指令即可完成查询:
# 查询文档中的部分字段
docs = coll.find({}, {"_id": 0, "name": 1, "address": 1})
# 输出所有文档
for doc in docs:
print(doc)
以上指令将会打印出名为`customers`的集合中所有文档的`name`和`address`字段。可以通过使用投影参数来控制输出的文档的字段。
查询指定条件的文档
在MongoDB中,可以使用查询运算符来查询指定条件的文档。Python中,可以使用pymongo库中的find()方法和查询运算符来查询指定条件的文档。在控制台执行以下指令即可完成查询:
# 查询指定条件的文档
query = {"address": "Park Lane 38"}
docs = coll.find(query)
# 输出符合条件的文档
for doc in docs:
print(doc)
以上指令将会打印出名为`customers`的集合中所有地址为`Park Lane 38`的文档。可以通过使用查询运算符来控制查询结果。
更新文档
在MongoDB中,可以通过使用update_one()方法和update_many()方法来更新文档。Python中,可以使用pymongo库中的update_one()方法和update_many()方法来更新文档。在控制台执行以下指令即可完成更新:
# 更新单个文档
query = {"address": "Park Lane 38"}
newvalues = {"$set": {"address": "Canyon 123"}}
coll.update_one(query, newvalues)
# 输出更新后的文档
doc = coll.find_one(query)
print(doc)
# 更新多个文档
query = {"address": {"$regex": "^S"}}
newvalues = {"$set": {"name": "Minnie"}}
result = coll.update_many(query, newvalues)
# 输出更新的文档数目
print(result.modified_count)
以上指令将会更新名为`customers`的集合中所有地址以`S`打头的文档的`name`字段都为`Minnie`。可以通过使用update_one()或者update_many()方法来更新指定条件的文档。
删除文档
在MongoDB中,可以通过使用delete_one()方法和delete_many()方法来删除文档。Python中,可以使用pymongo库中的delete_one()方法和delete_many()方法来删除文档。在控制台执行以下指令即可完成删除:
# 删除单个文档
query = {"name": "John"}
coll.delete_one(query)
# 输出删除后的文档
docs = coll.find()
for doc in docs:
print(doc)
# 删除多个文档
query = {"address": {"$regex": "^S"}}
result = coll.delete_many(query)
# 输出删除的文档数目
print(result.deleted_count)
以上指令将会删除名为`customers`的集合中所有地址以`S`打头的文档。可以通过使用delete_one()或者delete_many()方法来删除指定条件的文档。
总结
在Python中使用pymongo库连接MongoDB数据库,并进行基础操作,可以如上述所示完成。mongoose和Python的交互操作,可以方便的使用到mongoose所提供的灵活的查询、索引等功能,更好的支持数据分析操作。同时,在实际编程过程中,可以根据自己的需求来灵活使用这些基础操作。