Mongodb基本操作与Python连接mongodb并进行基础操作的方法

介绍

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所提供的灵活的查询、索引等功能,更好的支持数据分析操作。同时,在实际编程过程中,可以根据自己的需求来灵活使用这些基础操作。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签