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

时间:2016-04-22 11:28:32

标签: mongodb mongodb-query nosql

MongoDB上insert()insertOne()insertMany()方法之间的区别是什么?我应该在什么情况下使用每一个?

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

4 个答案:

答案 0 :(得分:60)

  

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

    文档中提到的
  • db.collection.insert()将一个或多个文档插入到集合中并返回 单个插入的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。当然,文档中没有提到这一点,但事实是没有人真正在shell中编写应用程序。同样的事情也适用于updateOneupdateManydeleteOnedeleteManyfindOneAndDeletefindOneAndUpdatefindOneAndReplace。请参阅Write Operations Overview

答案 1 :(得分:8)

  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")
    }
    
  3. db.collection.insertMany()

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

    db.collection.insertMany(
        { [ <document 1> , <document 2>, ... ] });
    

    返回以下文档:

    {
       "acknowledged" : true,
       "insertedIds" : [
          ObjectId("562a94d381cb9f1cd6eb0e1a"),
          ObjectId("562a94d381cb9f1cd6eb0e1b"),
          ObjectId("562a94d381cb9f1cd6eb0e1c")
       ]
    }
    
  4. 所有这三个也允许您定义自定义writeConcern,并且如果它不存在也创建一个集合。

答案 2 :(得分:3)

错误处理也有区别,请检查here。 insert命令在成功和错误情况下都返回文档。但insertOne和insertMany命令抛出异常。代码中的异常比评估返回的文档以找出错误更容易处理。可能是他们在sstyvane的答案中提到的驱动程序中被弃用的原因。

答案 3 :(得分:-1)

如果集合不存在,则insertOne()方法创建集合。如果再次输入相同的数据,mongod将创建另一个唯一ID以避免重复。