MongoDB에서 "_id" Field의 Value는 document들을 구별하는 역할을 한다.
만약 다른 모든 Field와 Value들이 똑같더라도 "_id" Field 의 Value만 다르면 다른 document이다.
반대로 생각하면 모든 Field와 Value들이 다르더라도 "_id" Field 의 Value만 같아도 같은 필드로 인식해서 에러가 생긴다.
만약 "_id" Field의 Value를 설정하지 않으면 자동적으로 Value가 생성된다.
아래 사진을 보면 임의로 생성된 "_id"를 볼 수 있다.
MongoDB에서 Create 명령어는 insert이다.
아래와 같이 insert안에 JSON 형태로 입력하면 된다.
db.<CollectionName>.insert({
..."_id": <_idWhatYouWant>,
..."<key>": <valueWhatYouWant>,
..."<key>": <valueWhatYouWant>,
...})
"..."들은 사용자가 입력하는 것이 아니고 터미널에서 Enter를 입력하면 자동적으로 생성된다.
위의 예시에서 "_id"를 입력하지 않으면 MongoDB에서 자동적으로 생성해서 입력해준다.
만약 "_id"가 겹치는 document가 있으면 "errmsg"가 출력된다.
만약 입력이 잘 되었으면 acknowledged라는 값이 true이고 어떤 아이디 들이 들어갔는지 insetedIds로 표현되는 결과가 출력될 것이다.
만약 document를 여러개 insert 하고 싶으면 배열 형태 집어넣으면 된다.
3개의 document를 insert하는 예시를 보여주자면, 아래 예시와 같다.
db.<CollectionName>.insert([{"test":"1"}, {"test":"2"}, {"test":"3"}])
그럼 결과 값이 아래와 같이 출력될 것이다.
{
acknowledged: true,
insertedIds: {
'0': ObjectId("6105f25199c4ef0380c7f74d"),
'1': ObjectId("6105f25199c4ef0380c7f74e"),
'2': ObjectId("6105f25199c4ef0380c7f74f")
}
MongoDB는 MySQL과 다르게 index가 대부분 언어들과 같이 0부터 시작된다.
각각의 insert배열의 index값의 순서대로 들어간 "_id"값들을 출력한다.
Read 명령어는 find이다.
find는 매우 간단한데
db.<CollectionName>.find(<query>)
를 입력하면 된다.
만약 모든 Collection안에 모든 자료를 보고싶으면 아래처럼 find안에 아무인자도 넣지 않으면 된다.
db.<CollectionName>.find()
만약 자료가 20개가 넘는다면 맨 아래 Type "it" for more라는 문장이 출력될 것이다.
it라고 입력하면 다음 20개의 document들이 나온다.
만약 document의 갯수만 알고 싶으면 count명령어를 사용하면 된다.
db.<CollectionName>.find(<query>).count()
마지막으로 특정 데이터 1개만 찾고 싶으면 find 대신 findOne 명령어를 사용하면 된다.
만약 그 데이터가 여러개 라면 랜덤으로 한개의 데이터를 가져온다.
Update하는 명령어는 한 개의 document만 update하는 updateOne과 쿼리문과 일치하는 모든 document들을 업데이트하는 updateMany가 있다.
Update연산자중 $inc, $set, $push가 있다.
inc는 증가를, set은 변환을 push는 배열로 이루어진 필드값을 업데이트 한다.
set과 push는 일치하는 field가 없을 경우 새로운 field를 생성한다.
그 중 push는 value를 배열로 생성한다.
가장 많이 쓰이는 set으로 update형식을 예시로 들어보겠다.
만약 collectionName 이 col이고 collection안의 document중 "test"라는 field의 value가 "1"인 document 하나를 찾아 "testField"라는 field의 value를 "3"으로 바꾸고 싶다면 아래와 같이 작성하면 된다.
db.col.updateOne({"test": "1"}, {"set": {"testField": "3"}})
Delete도 update와 마찬가지로 하나만 삭제하는 deleteOne과 쿼리문과 일치하는 모든 document를 찾아 삭제하는 deleteMany가 있다.
deletOne을 사용할때는 일치하는 하나의 document만 찾기 때문에 "_id"값으로 찾아서 삭제하는 것이 좋다.
find와 비슷하게 작성하면 되는데
deleteOne으로 예시를 들자면
db.<CollectionName>.deleteOne({"_id": <value>})
위와 같이 작성하면 된다.
만약 collection을 삭제하고 싶으면 명령어는 drop이다.
db.<CollectionName>.drop()
위와같이 작성하면 된다.