Post List

2015년 8월 2일 일요일

MongoDB Study #03 Data Input / Update / Remove

1. INSERT

 db.collection.insert( document-json형식 );

document-json 은 { field명:data , ... } 의 형식으로 표현합니다.
만약 현재 생성되지 않은 collection명을 입력하면 해당 collection을 생성하게 됩니다.

MongoDB는 명시하지 않아도 _id 라는 field를 생성합니다.
이 값은 자동으로 생성되는 12 bytes 값이며 Unique한 값을 가집니다.



.save() 함수를 이용하여 입력도 가능합니다.
.save() 는 INSERT 보다는 UPDATE에 가깝지만, _id를 입력하지 않으면 INSERT로 동작합니다.
같은 값을 계속 .save()로 입력하는 경우 추가로 계속 INSERT가 됩니다.

하지만 .insert()나 .update() 는 직접적으로 명시한 field만큼만 memory를 이용하지만,
.save()는 document 크기만큼 memory를 할당받습니다.

MongoDB는 javascript code를 지원합니다.
for 문을 이용하여 여러 data의 입력이 가능합니다.

NoSQL의 경우 collection 내의 document 들이 모두 같은 field를 가질 필요가 없습니다.
RDBMS의 경우 사용하지 않는 column이더라도 record 입력시 null 값으로 해당 column을 가지지만,
NoSQL의 document는 명시한 field만 생성합니다.

.find() : RDBMS의 SELECT 명령문 입니다. 자세한 사용법은 다음에 다루겠습니다.
만약 표현해야할 document 가 20개가 넘을 경우 20개만 출력되며, it 를 입력하면 다음 20개가 출력됩니다.

아래 실습을 통해서 INSERT 하는 방법들에 대해서 살펴보겠습니다.

> m = { ename : "Luna" }
{ "ename" : "Luna" }
> n = { empno : 0726 }
{ "empno" : 470 }
> db.emp.save(m)
WriteResult({ "nInserted" : 1 })
> db.emp.save(n)
WriteResult({ "nInserted" : 1 })
> db.emp.find()
{ "_id" : ObjectId("55bd9cbdfb2af3ec37f9b3e0"), "ename" : "Luna" }
{ "_id" : ObjectId("55bd9cc5fb2af3ec37f9b3e1"), "empno" : 470 }
> db.emp.insert({ empno:1101, dept:"sales" })
WriteResult({ "nInserted" : 1 })
> for (var n = 1; n <= 10; n++) db.emp.insert({empno: 100+n , desc : "test" })
WriteResult({ "nInserted" : 1 })
> db.emp.find()
{ "_id" : ObjectId("55bd9cbdfb2af3ec37f9b3e0"), "ename" : "Luna" }
{ "_id" : ObjectId("55bd9cc5fb2af3ec37f9b3e1"), "empno" : 470 }
{ "_id" : ObjectId("55bd9dedfb2af3ec37f9b3e2"), "empno" : 1101, "dept" : "sales" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e3"), "empno" : 101, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e4"), "empno" : 102, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e5"), "empno" : 103, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e6"), "empno" : 104, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e7"), "empno" : 105, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e8"), "empno" : 106, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e9"), "empno" : 107, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3ea"), "empno" : 108, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3eb"), "empno" : 109, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3ec"), "empno" : 110, "desc" : "test" }
> m = { ename: "LUNA" }
{ "ename" : "LUNA" }
> db.emp.save(m)
WriteResult({ "nInserted" : 1 })
> db.emp.save({ ename : "LUNA" })
WriteResult({ "nInserted" : 1 })
> db.emp.find()
{ "_id" : ObjectId("55bd9cbdfb2af3ec37f9b3e0"), "ename" : "Luna" }
{ "_id" : ObjectId("55bd9cc5fb2af3ec37f9b3e1"), "empno" : 470 }
{ "_id" : ObjectId("55bd9dedfb2af3ec37f9b3e2"), "empno" : 1101, "dept" : "sales" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e3"), "empno" : 101, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e4"), "empno" : 102, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e5"), "empno" : 103, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e6"), "empno" : 104, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e7"), "empno" : 105, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e8"), "empno" : 106, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e9"), "empno" : 107, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3ea"), "empno" : 108, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3eb"), "empno" : 109, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3ec"), "empno" : 110, "desc" : "test" }
{ "_id" : ObjectId("55bda055fb2af3ec37f9b3ed"), "ename" : "LUNA" }

{ "_id" : ObjectId("55bda077fb2af3ec37f9b3ee"), "ename" : "LUNA" }


2. UPDATE

db.collection.update( { 검색조건 } , { $set: { 수정할 값 } }, [ {multi: true} ] )

뒤에 multi 절은 생략이 가능합니다.
기본적으로는 조건에 만족하는 첫 번째 document만 수정하는데,
{multi:true} 로 해주시면 조건에 만족하는 모든 document들을 다 수정합니다.

.save() 로도 수정이 가능하나 이럴 경우 _id 값을 적어줘야 하며, document 단위의 UPDATE 이므로 수정할 filed만 명시할 것이 아니라 모든 filed를 다 적어줘야 합니다.
MongoDB에는 같은 field명에 다른 형식의 data 입력 및 수정이 가능합니다.

> db.emp.update({empno:101},{$set:{ename:"Star", locate:"Seoul"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.save({empno:470,ename:"SJ"})
WriteResult({ "nInserted" : 1 })
> db.emp.save({_id:ObjectId("55bd9cc5fb2af3ec37f9b3e1"), empno:"KOR403"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find()
{ "_id" : ObjectId("55bd9cbdfb2af3ec37f9b3e0"), "ename" : "Luna" }
{ "_id" : ObjectId("55bd9cc5fb2af3ec37f9b3e1"), "empno" : "KOR403" }
{ "_id" : ObjectId("55bd9dedfb2af3ec37f9b3e2"), "empno" : 1101, "dept" : "sales" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e3"), "empno" : 101, "desc" : "test", "ename" : "Star", "locate" : "Seoul" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e4"), "empno" : 102, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e5"), "empno" : 103, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e6"), "empno" : 104, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e7"), "empno" : 105, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e8"), "empno" : 106, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3e9"), "empno" : 107, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3ea"), "empno" : 108, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3eb"), "empno" : 109, "desc" : "test" }
{ "_id" : ObjectId("55bd9e3bfb2af3ec37f9b3ec"), "empno" : 110, "desc" : "test" }
{ "_id" : ObjectId("55bda055fb2af3ec37f9b3ed"), "ename" : "LUNA" }
{ "_id" : ObjectId("55bda077fb2af3ec37f9b3ee"), "ename" : "LUNA" }
{ "_id" : ObjectId("55bda1c2fb2af3ec37f9b3ef"), "empno" : 470, "ename" : "SJ" }


3. REMOVE

db.collection.remove( { 검색조건 } )

RDBMS와 마찬가지로 검색조건에 빈 document를 넣으면, 모든 document를 삭제합니다.
자세한 설명은 생략하고, 바로 실습으로 들어가겠습니다.

> db.emp.remove({desc:"test"})
WriteResult({ "nRemoved" : 10 })
> db.emp.find()
{ "_id" : ObjectId("55bd9cbdfb2af3ec37f9b3e0"), "ename" : "Luna" }
{ "_id" : ObjectId("55bd9cc5fb2af3ec37f9b3e1"), "empno" : "KOR403" }
{ "_id" : ObjectId("55bd9dedfb2af3ec37f9b3e2"), "empno" : 1101, "dept" : "sales" }
{ "_id" : ObjectId("55bda055fb2af3ec37f9b3ed"), "ename" : "LUNA" }
{ "_id" : ObjectId("55bda077fb2af3ec37f9b3ee"), "ename" : "LUNA" }
{ "_id" : ObjectId("55bda1c2fb2af3ec37f9b3ef"), "empno" : 470, "ename" : "SJ" }
> db.emp.remove({})
WriteResult({ "nRemoved" : 6 })
> db.emp.find()
> db.emp.drop()
true

댓글 없음:

댓글 쓰기