MongoDB 에서 insert 는 insertOne, insertMany 를 사용하는데 insertMany 테스트 

insertMany는 트랜잭션을 보장하지 않는다. insert 하다 에러가 발생하면 중단되고 그전에 insert 된것은 입력된 상태.

updateMany, deleteMany 도 동일할듯 

# 테스트용 test 컬렉션 생성 
test> db.test.insertOne({"name":"user1", "age":20})
{
  acknowledged: true,
  insertedId: ObjectId("61f52e50260badd9f57f3a1f")
}
# name 컬럼에 유니크 인덱스 생성 
test> db.test.createIndex(
...     {"name":1},
...     {unique: true}
... );
name_1

# insertMany 로 name: user2, user1 을 넣을 경우
test> to_insert = [
...      {"name":"user2", "age":19},
...      {"name":"user1", "age":20}
... ]
[ { name: 'user2', age: 19 }, { name: 'user1', age: 20 } ]

# 오류 발생 
test> db.test.insertMany(to_insert)
Uncaught:
MongoBulkWriteError: E11000 duplicate key error collection: test.test index: name_1 dup key: { name: "user1" }
Result: BulkWriteResult {
  result: {
    ok: 1,
    writeErrors: [
      WriteError {
        err: {
          index: 1,
          code: 11000,
          errmsg: 'E11000 duplicate key error collection: test.test index: name_1 dup key: { name: "user1" }',
          errInfo: undefined,
          op: {
            name: 'user1',
            age: 20,
            _id: ObjectId("61f52f4b260badd9f57f3a23")
          }
        }
      }
    ],
    writeConcernErrors: [],
    insertedIds: [
      { index: 0, _id: ObjectId("61f52f4b260badd9f57f3a22") },
      { index: 1, _id: ObjectId("61f52f4b260badd9f57f3a23") }
    ],
    nInserted: 1,
    nUpserted: 0,
    nMatched: 0,
    nModified: 0,
    nRemoved: 0,
    upserted: []
  }
}

# 먼저 입력된 name: user2 는 입력되고 name: user1 은 유니크 인덱스 오류로 입력 안됨 
test> db.test.find()
[
  { _id: ObjectId("61f52e50260badd9f57f3a1f"), name: 'user1', age: 20 },
  { _id: ObjectId("61f52f4b260badd9f57f3a22"), name: 'user2', age: 19 }
]

# name: user1, user2 순서로 입력하면 어떻게 될지 궁금해서 name:user2 를 삭제 
test> db.test.deleteMany({"name":"user2"})
{ acknowledged: true, deletedCount: 1 }
test> db.test.find()
[
  { _id: ObjectId("61f52e50260badd9f57f3a1f"), name: 'user1', age: 20 }
]

# name: user1, user2 순서로 입력
test> to_insert = [
...     {"name":"user1", "age":20}, 
...     {"name":"user2", "age":19}
... ]
[ { name: 'user1', age: 20 }, { name: 'user2', age: 19 } ]

# 유니크 인덱스 중복으로 오류 발생 
test> db.test.insertMany(to_insert)
Uncaught:
MongoBulkWriteError: E11000 duplicate key error collection: test.test index: name_1 dup key: { name: "user1" }
Result: BulkWriteResult {
  result: {
    ok: 1,
    writeErrors: [
      WriteError {
        err: {
          index: 0,
          code: 11000,
          errmsg: 'E11000 duplicate key error collection: test.test index: name_1 dup key: { name: "user1" }',
          errInfo: undefined,
          op: {
            name: 'user1',
            age: 20,
            _id: ObjectId("61f52f02260badd9f57f3a20")
          }
        }
      }
    ],
    writeConcernErrors: [],
    insertedIds: [
      { index: 0, _id: ObjectId("61f52f02260badd9f57f3a20") },
      { index: 1, _id: ObjectId("61f52f02260badd9f57f3a21") }
    ],
    nInserted: 0,
    nUpserted: 0,
    nMatched: 0,
    nModified: 0,
    nRemoved: 0,
    upserted: []
  }
}

# 입력 처리가 되지 않았다. 
test> db.test.find()
[
  { _id: ObjectId("61f52e50260badd9f57f3a1f"), name: 'user1', age: 20 }
]

 

 

 

+ Recent posts