Какая разница между методами insert()
, insertOne()
и insertMany()
на MongoDB. В какой ситуации я должен использовать каждый?
Я прочитал документы, но не понял, когда они используются.
Какая разница между методами insert()
, insertOne()
и insertMany()
на MongoDB. В какой ситуации я должен использовать каждый?
Я прочитал документы, но не понял, когда они используются.
Какая разница между методами insert(), insertOne() и insertMany() на MongoDB
db.collection.insert()
, как указано в документации, вставляет документ или документы в коллекцию и возвращает
a WriteResult для одиночных вставок и BulkWriteResult объект для объемных вставок.
> var d = db.collection.insert({"b": 3})
> d
WriteResult({ "nInserted" : 1 })
> var d2 = db.collection.insert([{"b": 3}, {'c': 4}])
> d2
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
db.collection.insertOne()
, как указано в документации, вставляет документ в коллекцию и возвращает документ, который выглядит следующим образом:
> var document = db.collection.insertOne({"a": 3})
> document
{
"acknowledged" : true,
"insertedId" : ObjectId("571a218011a82a1d94c02333")
}
db.collection.insertMany()
вставляет несколько документов в коллекцию и возвращает документ, который выглядит следующим образом:
> var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
> res
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("571a22a911a82a1d94c02337"),
ObjectId("571a22a911a82a1d94c02338")
]
}
В какой ситуации я должен использовать каждый из них?
Метод insert()
устарел в основном драйвере, поэтому вы должны использовать
метод .insertOne()
всякий раз, когда вы хотите вставить один документ в свою коллекцию и .insertMany
, когда вы хотите вставить несколько документов в свою коллекцию. Конечно, это не упоминается в документации, но факт в том, что никто не пишет приложение в оболочке. То же самое относится к updateOne
, updateMany
, deleteOne
, deleteMany
, findOneAndDelete
, findOneAndUpdate
и findOneAndReplace
. См. Обзор операций записи.
db.collection.insert()
:
Он позволяет вставлять один или несколько документов в коллекцию. Синтаксис:
db.collection.insert({<document>});
Несколько вставка:
db.collection.insert([ ,... ]);
Возвращает объект WriteResult
: WriteResult({ "nInserted" : 1 });
db.collection.insertOne()
:
Он позволяет вставить ровно 1 документ в коллекцию. Его синтаксис такой же, как у одной вставки в insert()
.
Возвращает следующий документ:
{
"acknowledged" : true,
"insertedId" : ObjectId("56fc40f9d735c28df206d078")
}
db.collection.insertMany()
:
Он позволяет вставлять в коллекцию массив документов. Синтаксис:
db.collection.insertMany(
{ [ <document 1> , <document 2>, ... ] });
Возвращает следующий документ:
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("562a94d381cb9f1cd6eb0e1a"),
ObjectId("562a94d381cb9f1cd6eb0e1b"),
ObjectId("562a94d381cb9f1cd6eb0e1c")
]
}
Все три из них также позволяют определить пользовательский writeConcern
, а также создать коллекцию, если она не существует.
Если коллекция не существует, то метод insertOne() создает коллекцию. Если вы снова вводите одни и те же данные, mongod создаст еще один уникальный идентификатор, чтобы избежать дублирования.
Существует также разница в обработке ошибок, здесь здесь. Команда insert возвращает документ как в случае успеха, так и в случае ошибок. Но команды insertOne и insertMany выбрасывают. Исключения легче обрабатывать в коде, чем оценивать возвращенный документ для определения ошибок. Вероятно, причина, по которой они устарели в драйверах, как упоминалось в sstyvane, отвечают.