MongoDB 스터디 6주차(MongoDB CURD 쓰기 연산)
Create Operations
db.collection.insertOne()
도큐먼트를 하나 추가합니다.
문법
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
- writeConcern
- w: 몇 개의 mongod 에 저장 후 응답할 지 설정
- <숫자>: 몇 개의 mongod 에 기록될 지 직접 지정
- “majority”: 과반의 mongod 에 기록되게 설정
- <커스텀 write concern 이름>: 특정 데이터 센터에 저장되게 설정가능, Custom Multi-Datacenter Write Concerns
- j: 디스크의 저널에 저장 후 응답할지 설정 여부
- timeout: 쓰기 제한 시간(밀리세컨드), 반환하기 전에 이미 성공한 쓰기 작업을 롤백하지 않음
- w: 몇 개의 mongod 에 저장 후 응답할 지 설정
예
db.products.insertOne(
{ "item": "envelopes", "qty": 100, type: "Self-Sealing" },
{ writeConcern: { w : "majority", wtimeout : 100 } }
);
db.collection.insertMany()
도큐먼트를 여러 개 추가합니다.
문법
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
- ordered
- 입력이 순서를 유지할 지 여부, 기본값은 true
예: ordered true
db.products.insertMany( [
{ _id: 13, item: "envelopes", qty: 60 },
{ _id: 13, item: "stamps", qty: 110 },
{ _id: 14, item: "packing tape", qty: 38 }
] );
BulkWriteError({
"writeErrors" : [
{
"index" : 0,
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 13.0 }",
"op" : {
"_id" : 13,
"item" : "stamps",
"qty" : 110
}
}
],
"writeConcernErrors" : [ ],
"nInserted" : 1,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
예: ordered false
db.products.insertMany( [
{ _id: 10, item: "large box", qty: 20 },
{ _id: 11, item: "small box", qty: 55 },
{ _id: 11, item: "medium box", qty: 30 },
{ _id: 12, item: "envelope", qty: 100},
{ _id: 13, item: "stamps", qty: 125 },
{ _id: 13, item: "tape", qty: 20},
{ _id: 14, item: "bubble wrap", qty: 30}
], { ordered: false } );
BulkWriteError({
"writeErrors" : [
{
"index" : 2,
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 11.0 }",
"op" : {
"_id" : 11,
"item" : "medium box",
"qty" : 30
}
},
{
"index" : 5,
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 13.0 }",
"op" : {
"_id" : 13,
"item" : "tape",
"qty" : 20
}
}
],
"writeConcernErrors" : [ ],
"nInserted" : 5,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Update Operations
db.collection.updateOne()
도큐먼트를 하나 업데이트합니다.
문법
db.collection.updateOne(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
- upsert: true일 경우 필터로 매치되는 도큐먼트가 없으면 새 도큐먼트 생성
- collation: 언어별 특화된 문자열 처리 옵션 collation 참조
- arrayFilters: 배열 업데이트를 위한 필터
- hint: 인덱스 힌트
예
db.students.insert([
{ "_id" : 1, "grades" : [ 95, 92, 90 ] },
{ "_id" : 2, "grades" : [ 98, 100, 102 ] },
{ "_id" : 3, "grades" : [ 95, 110, 100 ] }
])
db.students.updateMany(
{ grades: { $gte: 100 } },
{ $set: { "grades.$[element]" : 100 } },
{
arrayFilters: [ { "element": { $gte: 100 } } ]
}
)
{ "_id" : 1, "grades" : [ 95, 92, 90 ] }
{ "_id" : 2, "grades" : [ 98, 100, 100 ] }
{ "_id" : 3, "grades" : [ 95, 100, 100 ] }
db.collection.updateMany()
도큐먼트를 여러 개 업데이트합니다.
db.collection.replaceOne()
필터된 도큐먼트를 새 도큐먼트로 변경합니다.
예
db.students.insert([
{ "_id" : 1, "grades" : [ 95, 92, 90 ] },
{ "_id" : 2, "grades" : [ 98, 100, 102 ] },
{ "_id" : 3, "grades" : [ 95, 110, 100 ] }
])
db.students.replaceOne(
{ "_id" : 1 },
{ "grade_sum" : 100 }
);
{ "_id" : 1, "grade_sum" : 100 },
{ "_id" : 2, "grades" : [ 98, 100, 102 ] },
{ "_id" : 3, "grades" : [ 95, 110, 100 ] }
Delete operations
db.collection.deleteOne()
필터된 도큐먼트를 하나 지웁니다.
문법
db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>,
hint: <document|string> // Available starting in MongoDB 4.4
}
)
db.collection.deleteMany()
필터된 도큐먼트를 여러개 지웁니다.
문법
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
Bulk Write Operations
db.collection.bulkWrite()
여러 작업을 한 번에 합니다.
문법
db.collection.bulkWrite(
[ <operation 1>, <operation 2>, ... ],
{
writeConcern : <document>,
ordered : <boolean>
}
)
- 사용가능 명령
- insertOne
- updateOne
- updateMany
- deleteOne
- deleteMany
- replaceOne
예
db.characters.bulkWrite([
{ insertOne: { "document": { "_id": 4, "char": "Dithras", "class": "barbarian", "lvl": 4 } } },
{ insertOne: { "document": { "_id": 5, "char": "Taeln", "class": "fighter", "lvl": 3 } } },
{ updateOne : {
"filter" : { "char" : "Eldon" },
"update" : { $set : { "status" : "Critical Injury" } }
} },
{ deleteOne : { "filter" : { "char" : "Brisbane"} } },
{ replaceOne : {
"filter" : { "char" : "Meldane" },
"replacement" : { "char" : "Tanys", "class" : "oracle", "lvl": 4 }
} }
]);
db.collection.insertMany()
위에서 설명한 insertMany 도 Bulk Write 로 구분됩니다.
$isolated
4.0 에서 제거되었고, 필요하면 트랜잭션을 사용하길 권고합니다.