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 }
]
'MongoDB' 카테고리의 다른 글
Percona Monitoring and Management - MongoDB (0) | 2021.12.19 |
---|---|
네이버의 MongoDB 활용 사례 (0) | 2021.05.20 |
작은 컬렉션에서 슬로우 쿼리가 발생할때 (0) | 2021.05.14 |