web-dev-qa-db-ja.com

insert()、insertOne()、insertMany()メソッドの違いは何ですか?

MongoDBのinsert()insertOne()およびinsertMany()メソッドの違いは何ですか?どの状況でそれぞれを使用する必要がありますか?

私はドキュメントを読みましたが、それぞれを使用するときは明確ではありません。

42
Marcos Mendes

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()メソッドはメジャードライバーでは廃止されているため、1つのドキュメントをコレクションに挿入する場合は常に.insertOne()メソッドを使用し、複数のドキュメントをコレクションに挿入する場合は.insertManyを使用する必要があります。もちろん、これはドキュメントには記載されていませんが、実際には誰も実際にシェルでアプリケーションを作成していません。同じことが updateOneupdateManydeleteOnedeleteManyfindOneAndDelete に適用されます findOneAndUpdate および findOneAndReplace書き込み操作の概要 を参照してください。

65
styvane
  1. db.collection.insert()

    コレクションに1つ以上のドキュメントを挿入できます。構文:

    • 単一挿入: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")
       ]
    }
    

これら3つすべてを使用して、カスタムwriteConcernを定義し、コレクションが存在しない場合はコレクションを作成することもできます。

8
ayushgp

エラー処理にも違いがあります。 here を確認してください。 insertコマンドは、成功とエラーの両方のケースでドキュメントを返します。ただし、insertOneおよびinsertManyコマンドは例外をスローします。例外は、返されたドキュメントを評価してエラーを把握するよりも、コードで処理する方が簡単です。おそらく、sstyvaneの回答で述べられているように、ドライバーで廃止される理由です。

3
Andrew Nessin