📜  Pymongo 中 insert()、insertOne() 和 insertMany() 之间的区别(1)

📅  最后修改于: 2023-12-03 15:33:50.917000             🧑  作者: Mango

Pymongo 中 insert()、insertOne() 和 insertMany() 之间的区别

在使用 Pymongo 进行数据库操作时,我们经常需要向集合中插入新的数据。Pymongo 提供了三种不同的插入方法:insert()insertOne()insertMany()。虽然它们的作用是相同的,但它们的使用方式和行为有所不同。在本文中,我们将介绍这三种方法之间的区别。

insert()

insert() 方法用于向集合中插入单个文档或多个文档。它接受一个字典或一个由字典组成的列表作为参数。如果传递的是一个字典,则表示插入单个文档,如果传递的是一个列表,则表示插入多个文档。

下面是一个向 users 集合中插入单个文档的示例:

from pymongo import MongoClient

client = MongoClient()
db = client["mydatabase"]
users = db["users"]

user = {"name": "Alice", "age": 25}
result = users.insert(user)

在上面的示例中,我们向 users 集合中插入了一个名为 Alice,年龄为 25 的用户。插入成功后,insert() 方法会返回一个 WriteResult 对象,可以通过该对象的 acknowledged 属性来判断插入是否成功。

如果要插入多个文档,可以将文档放入一个列表中,如下所示:

from pymongo import MongoClient

client = MongoClient()
db = client["mydatabase"]
users = db["users"]

users_to_insert = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 30},
]
result = users.insert(users_to_insert)

在上面的示例中,我们向 users 集合中插入了两个用户的信息。插入成功后,insert() 方法同样会返回一个 WriteResult 对象。

需要注意的是,使用 insert() 方法插入已经存在的数据时,会抛出 DuplicateKeyError 异常。这是因为在 MongoDB 中,每个文档都有一个唯一的 _id 字段,如果插入的文档中包含相同的 _id 值,就会导致插入失败。

insertOne()

insertOne() 方法用于向集合中插入单个文档。它接受一个字典作为参数,并将其插入到集合中。与 insert() 方法不同的是,insertOne() 方法只能插入一个文档,并且不允许插入多个文档。

下面是一个向 users 集合中插入单个文档的示例:

from pymongo import MongoClient

client = MongoClient()
db = client["mydatabase"]
users = db["users"]

user = {"name": "Alice", "age": 25}
result = users.insertOne(user)

在上面的示例中,我们向 users 集合中插入了一个名为 Alice,年龄为 25 的用户。插入成功后,insertOne() 方法会返回一个 InsertOneResult 对象,可以通过该对象的 acknowledged 属性来判断插入是否成功。

需要注意的是,如果插入的文档中包含相同的 _id 值,就会导致插入失败,并抛出 DuplicateKeyError 异常。

insertMany()

insertMany() 方法用于向集合中插入多个文档。它接受一个由字典组成的列表作为参数,并将其插入到集合中。与 insert() 方法不同的是,insertMany() 方法只能插入多个文档,并且不允许插入单个文档。

下面是一个向 users 集合中插入多个文档的示例:

from pymongo import MongoClient

client = MongoClient()
db = client["mydatabase"]
users = db["users"]

users_to_insert = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 30},
]
result = users.insertMany(users_to_insert)

在上面的示例中,我们向 users 集合中插入了两个用户的信息。插入成功后,insertMany() 方法会返回一个 InsertManyResult 对象,可以通过该对象的 acknowledged 属性来判断插入是否成功。

需要注意的是,如果插入的文档中包含相同的 _id 值,就会导致插入失败,并抛出 BulkWriteError 异常。

总结

在使用 Pymongo 插入数据时,三种方法的使用方式和行为略有不同。insert() 方法可以插入单个或多个文档,但是当插入已经存在的数据时会抛出异常;insertOne() 方法只能插入单个文档,适合只插入一个文档的场景;insertMany() 方法只能插入多个文档,适合插入多个文档的场景。在实际使用中,需要根据具体场景选择合适的方法。