본문 바로가기
[ Developer ]/MongoDB

[MongoDB] 몽고디비 제한자 종류

by 김현섭. 2016. 6. 23.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
제한자

@ $inc 제한자
  • 값 증가 : $inc
  • 사용 용도: 게시글 조회수 증가, 사용자 Point 증감, 시퀀스 등등

  • 시퀀스 만들기
    • > db.createCollection("seq") // 시퀀스 문서만 담을 컬렉션 생성
    • { "ok" : 1 }
    • > var seq = {“name” : “post”, “val" : 0} // 시퀀스 객체 생성
    • > db.seq.insert(seq) // 시퀀스 문서 생성
    • WriteResult({ "nInserted" : 1 })
    • >

  • 시퀀스 값 증가시키기
    • > db.seq.update({"name" : "post"}, {"$inc" : {"val" : 1}}) // $inc 제한자를 이용해 값 1 증가시키기
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • >

  • 증가값 가져오기
    • > db.seq.findOne({"name" : "post"})
    • { "_id" : ObjectId("56258f1ec8677ca2752803cf"), "name" : "post", "val" : 1 }
    • >

@ $set 제한자
  • 값 증가 : $set
  • 사용 용도 : 필드 추가 (필드가 없을 경우) 및 필드 값 수정(필드 존재)

  •  “최근에본 영화” 추가 ( 추가 입력은 불가능)
    • > db.user.update({"id" : "mcjang"}, {"$set" : {"latestSeenMovie" : "추격자"}})
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > db.user.findOne({"id" : "mcjang"})
    • {
    •   "_id" : ObjectId("56259382c8677ca2752803d0"),
    •   "id" : "mcjang",
    •   "password" : "1234",
    •   "name" : "MCJANG",
    •   "latestSeenMovie" : "추격자"
    • }
    • >

  •  “최근에본 영화” 수정
    • > db.user.update({"id" : "mcjang"}, {"$set" : {"latestSeenMovie" : "미니언즈"}})
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > db.user.findOne({"id" : "mcjang"})
    • {
    •   "_id" : ObjectId("56259382c8677ca2752803d0"),
    •   "id" : "mcjang",
    •   "password" : "1234",
    •   "name" : "MCJANG",
    •   "latestSeenMovie" : "미니언즈“ // 데이터가 추가되지 않고 수정된다.
    • }
    • >

@ $upset 제한자
  • Field와 값을 모두 삭제함
  • “최근에본 영화” 삭제
    • > db.user.update({"id" : "mcjang"}, {"$unset" : {"latestSeenMovie" : 1}})
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > db.user.findOne({"id" : "mcjang"})
    • {
    •   "_id" : ObjectId("56259382c8677ca2752803d0"),
    •   "id" : "mcjang",
    •   "password" : "1234",
    •   "name" : "MCJANG"
    • }
    • >

@ $push 제한자
  • $set 제한자와 같은 역할. 단, Field 가 존재할 경우 요소를 배열 끝에 추가한다.
  • “최근에본 영화” 등록
    • > db.user.update({"id" : "mcjang"}, {"$push" : {"latestSeenMovie" : "베테랑"}})
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > db.user.findOne({"id" : "mcjang"})
    • {
    •   "_id" : ObjectId("56259382c8677ca2752803d0"),
    •   "id" : "mcjang",
    •   "password" : "1234",
    •   "name" : "MCJANG",
    •   "latestSeenMovie" : [
    •   "베테랑"
    •   ]
    • }
    • >

@ $pull 제한자
  • 요소를 제거함
  • “최근에본 영화” 중 베테랑 제거
    • > db.user.update({"id" : "mcjang"}, {"$pull" : {"latestSeenMovie" : "베테랑"}})
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > db.user.findOne({"id" : "mcjang"})
    • {
    •   "_id" : ObjectId("56259382c8677ca2752803d0"),
    •   "id" : "mcjang",
    •   "password" : "1234",
    •   "name" : "MCJANG",
    •   "latestSeenMovie" : [
    •   "치외법권"
    •   ]
    • }
    • >

  • 포스트에 댓글을 여러 개 등록하고 그 중 하나 삭제하기
  • 시퀀스 증가
    • > db.seq.update({"name" : "post"}, {"$inc" : {"val" : 1}})
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > var seq= db.seq.findOne({"name" : "post"})
    • > seq
    • { "_id" : ObjectId("56258f1ec8677ca2752803cf"), "name" : "post", "val" : 1 }
    • > seq.val
    • 1
    • >

  • 포스트에 댓글을 여러 개 등록하고 그 중 하나 삭제하기
  • Post 등록
    • > varpost = {
    • ... "id" : seq.val,
    • ... "subject" : "MongoDB!",
    • ... "content" : "Awesome!",
    • ... "author" : "mcjang"
    • ... }
    • > db.post.insert(post);
    • WriteResult({ "nInserted" : 1 })
    • > db.post.findOne({"id": 1})
    • {
    •   "_id" : ObjectId("5625b57510aca55475b7f880"),
    •   "id" : 1,
    •   "subject" : "MongoDB!",
    •   "content" : "Awesome!",
    •   "author" : "mcjang"
    • }
    • >
  • 댓글 등록
    • > db.post.update({"id" : 1}, {"$push" : { "replies" : {"id" : 1 ,"author" : "guest", "content" : "^^" }}})
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > db.post.findOne({"id" : 1})
    • {
    •   "_id" : ObjectId("5625b57510aca55475b7f880"),
    •   "id" : 1,
    •   "subject" : "MongoDB!",
    •   "content" : "Awesome!",
    •   "author" : "mcjang",
    •   "replies" : [
    •   {
    •   "id" : 1,
    •   "author" : "guest",
    •   "content" : "^^"
    •   }
    •   ]
    • }
    • >

  • 포스트에 댓글을 여러 개 등록하고 그 중 하나 삭제하기
  • Id가 2번인 댓글 삭제하기
    • > db.post.update({"id" : 1}, {"$pull" : {"replies" : {"id" : 2 }}})
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > db.post.findOne({"id" : 1})
    • {
    •   "_id" : ObjectId("5625bbf80bcfc3fab5842c74"),
    •   "id" : 1,
    •   "subject" : "MongoDB!",
    •   "content" : "Awesome!",
    •   "author" : "mcjang",
    •   "replies" : [
    •   {
    •   "id" : 1,
    •   "author" : "guest",
    •   "content" : "^^"
    •   }
    •   ]
    • }
    • >

@ $Save - 자주 사용
  • 갱신입력 : $set과 동일한 역할이지만, 더 간단하게 사용할 수 있음.
    • > var post = db.post.findOne({"id" : 1})
    • > post.pageview= 1;
    • 1
    • > db.post.save(post)
    • WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    • > db.post.findOne({"id" : 1})
    • {
    •   "_id" : ObjectId("5625bbf80bcfc3fab5842c74"),
    •   "id" : 1,
    •   "subject" : "MongoDB!",
    •   "content" : "Awesome!",
    •   "author" : "mcjang",
    •   "replies" : [
    •   {
    •   "id" : 1,
    •   "author" : "guest",
    •   "content" : "^^"
    •   }
    •   ],
    •   "pageview" : 1
    • }
    • >