Какая разница между методами insert(), insertOne() и insertMany()?

Какая разница между методами insert(), insertOne() и insertMany() на MongoDB. В какой ситуации я должен использовать каждый?

Я прочитал документы, но не понял, когда они используются.

Ответ 1

Какая разница между методами 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. См. Обзор операций записи.

Ответ 2

  • 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, а также создать коллекцию, если она не существует.

Ответ 3

Если коллекция не существует, то метод insertOne() создает коллекцию. Если вы снова вводите одни и те же данные, mongod создаст еще один уникальный идентификатор, чтобы избежать дублирования.

Ответ 4

Существует также разница в обработке ошибок, здесь здесь. Команда insert возвращает документ как в случае успеха, так и в случае ошибок. Но команды insertOne и insertMany выбрасывают. Исключения легче обрабатывать в коде, чем оценивать возвращенный документ для определения ошибок. Вероятно, причина, по которой они устарели в драйверах, как упоминалось в sstyvane, отвечают.