insert(),insertOne()和insertMany()方法有什么区别?

Mar*_*des 46 mongodb nosql mongodb-query

什么之间的差异insert(),insertOne()以及insertMany()对MongoDB的方法.在什么情况下我应该使用每一个?

我阅读了文档,但是使用每个文档时都不清楚.

sty*_*ane 68

MongoDB上的insert(),insertOne()和insertMany()方法有什么区别

  • db.collection.insert()如文档中提到的插入文档或文档转换成一个集合,并返回一个写结果为单个插入对象和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" : [ ]
    })
    
    Run Code Online (Sandbox Code Playgroud)
  • db.collection.insertOne() 如文档中所述,将文档插入到集合中并返回如下所示的文档:

    > var document = db.collection.insertOne({"a": 3})
    > document
    {
            "acknowledged" : true,
            "insertedId" : ObjectId("571a218011a82a1d94c02333")
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • db.collection.insertMany() 将多个文档插入集合并返回如下所示的文档:

    > var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
    > res
    {
            "acknowledged" : true,
            "insertedIds" : [
                    ObjectId("571a22a911a82a1d94c02337"),
                    ObjectId("571a22a911a82a1d94c02338")
            ]
    }
    
    Run Code Online (Sandbox Code Playgroud)

在什么情况下我应该使用每一个?

insert()方法在主要驱动力过时,所以你应该使用的.insertOne(),每当你想插入一个文件到您的收藏和方法.insertMany时要插入多个文件到您的收藏.当然,文档中没有提到这一点,但事实是没有人真正在shell中编写应用程序.同样的道理也适用于updateOne,updateMany,deleteOne,deleteMany,findOneAndDelete,findOneAndUpdatefindOneAndReplace.请参阅写操作概述.


ayu*_*hgp 9

  1. db.collection.insert():

    它允许您在集合中插入一个或多个文档.句法:

    • 单插: db.collection.insert({<document>});
    • 多次插入:

      db.collection.insert([,, ...]);

    返回一个WriteResult对象:WriteResult({ "nInserted" : 1 });

  2. db.collection.insertOne():

    它允许您在集合中准确插入1个文档.它的语法与单个插入的语法相同insert().

    返回以下文档:

    {
       "acknowledged" : true,
       "insertedId" : ObjectId("56fc40f9d735c28df206d078")
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. db.collection.insertMany():

    它允许您在集合中插入一组文档.句法:

    db.collection.insertMany(
        { [ <document 1> , <document 2>, ... ] });
    
    Run Code Online (Sandbox Code Playgroud)

    返回以下文档:

    {
       "acknowledged" : true,
       "insertedIds" : [
          ObjectId("562a94d381cb9f1cd6eb0e1a"),
          ObjectId("562a94d381cb9f1cd6eb0e1b"),
          ObjectId("562a94d381cb9f1cd6eb0e1c")
       ]
    }
    
    Run Code Online (Sandbox Code Playgroud)

所有这三个也允许您定义自定义,writeConcern并且如果它不存在也创建一个集合.

  • 您可以将创建的文档的 id 与其他 2 一起返回。插入只是为您提供有关创建了多少文档的信息。 (2认同)

And*_*sin 5

错误处理也有所不同,请点击此处。在成功和错误的情况下,insert命令都会返回一个文档。但是insertOne和insertMany命令会引发异常。与评估返回的文档以找出错误相比,使用代码更容易处理异常。可能是sstyvane的答案中提到的驱动程序中不推荐使用它们的原因。