뭐든 즐기면서 ;)

MongoDB 갱신 / MongoDB 수정 / MongoDB update 본문

DB(데이타베이스)/MongoDB

MongoDB 갱신 / MongoDB 수정 / MongoDB update

Tada.*+ 2023. 4. 29. 16:38
728x90
  • deleteOne / deleteMany
    • document 삭제
  • updateOne / updateMany
    • field value 수정
    • field 추가 가능(안 될 줄,,)
    • 갱신 연산자
      • $inc : 수 증가
        • int, long, double, decimal 값에만 사용 가능. null, boolean, string에는 사용 불가.
      • $set : value 수정 및 field와 value 추가, 그리고 value 형식 변경 (ex: string > [array] )
      • $unset : field 삭제 (값은 뭘로 줘도 되는 듯,, -1, 1로 해봤는데 둘 다 된다.)
      • 배열관련 (이 색으로 지정한 것은 아래에 예제를 따로 작성해 두었습니다.)
        • $push : 배열에 값 추가
          • $each : 한 번에 여러개 추가할 때 사용
          • $slice : 배열에 저장할 길이 지정 (-일 경우 맨 처음, +일 경우 마지막 배열 값이 잘린다. 해서 정렬($sort)을 어떻게 하느냐에 따라 이 옵션 값도 잘 적용시켜야 한다.)
          • $sort : 배열 값 정렬 (-일 경우 내림차순, +일 경우 오름차순)
          • $ne & $addToSet
        • $pop : 배열에 값 제거
          • +일 경우 마지막부터 요소 제거
          • -일 경우 처음부터 요소 제서
        • $pull : 배열에서의 특정 값 제거
          • db.collection.updateOne( {}, {$pull: {todo : 'study'}} ) // study 값이 제거된다.
          • 배열 내 위치 기반 변경
            • $inc
            • $set
            • $ : 위치 연산자 (조건부 index가 필요할 때 사용)
            • arrayFilters

$slice / $sort 예제

// 예제 데이터
> db.drama.findOne({..});
> {name: '더 글로리',
	actors: ['송혜교', '임지연', '손명오']
	.
	.
	.
}

// slice 사용 예제
> db.drama.updateOne(
		{name: '더 글로리'}
		,{$push: 
			{actors:
				{$each: ['이도현', '최혜정']
				,$slice: 4
				,$sort: 1
                // 배열이 object일 경우 $sort 사용방법
                // $sort : {key: 1 또는 -1}
				}
			}
		})

// 위 과정을 거치고 난 후 데이터
{
	name: '더 글로리'
	,actors: ['손명오', '송혜교', '이도현', '임지연'] // $slice 4개까지만 넣을 수 있기에 최혜정은 잘림.
    // 만약 $slice가 -4였다면 값은 아래와 같이 나올 것이다.
    // ['송혜교', '이도현', '임지연', '최혜정']

}

// push > sort > slice 과정을 거치는 듯 보임.

배열 내 위치 기반 변경 ( $inc / $set / $ )

> db.blog.posts.findOne()
{
    _id: Obj.....
    ,"content" : "sdf..."
	,"comments":[
		{
			"comment" : "..."
			,"author" : "John",
			,"votes" : 0
		}
		,{
			"comment" : "i thought it was too short"
			,"author" : "CLaire"
			,"votes" : 3
		}
		,{
			"comment" : "free watches"
			,"author" : "Alice"
			,"votes" : -5
		}
}

// 아래는 특정 index에 field값 변경 방법
> db.blog.updateOne( {post: post_id}, {$inc: {'comments.1.votes' : 1}} )

// 아래는 특정 field의 특정 vaule를 가진 index에 특정 field value를 변경
> db.blog.updateOne( {'comments.author': 'John'}, {$set: {'coments.$.author': 'Jim'}} )
  •  replaceOne
    • field value 수정
    • field 삭제
    • field 추가
    • 모든 게 다 가능. 한 마디로, replace는 document의 형식 자체를 바꿔버릴 때 쓸 것 같다.

 

728x90
Comments