본문 바로가기

DB/MongoDB

[MongoDB] 7. 기본 명령어 - replace, update

728x90
반응형

var : 재선언 할 수 있는 변수 선언할 수 있다.
let : 재선언 할 수 없는 변수 선언, vES6의 Javascript에서 권장된다.

MongoDB에서는 var나 let으로 변수를 선언하여 값을 저장할 수 있다.

  • 변수는 쉘이 종료되면 사라짐.
  • 변수 접근은 '.' 연산자를 사용하여 접근
// var 변수명 = {필드:값}
// let 변수명 = {필드:값}
// 변수명.필드명
var myVar = {"color":"red"}
let a = {name: {fname:"Karoid", lname:"Park"}}

a.name.fname
a.name.lname

MongoDB의 배열

  • [] 기호안에 정의된다.
  • 사용하는 곳
    • 하나의 필드가 여러 개의 값을 가질 때
    • 여러개의 도큐먼트 삽입(insertMany())
  • 배열의 요소 접근
    • 인덱스로 접근 - 원하는 필드의 인덱스를 알아야함.
//{필드.index.필드}
ex) 
{commenets:[{author:"K",content:"hi"}]}
db.article.find({"comments.0.author":"K"})
  • 위치 연산자($)를 사용한 접근 - 권장됨.
    • 배열의 위치를 스스로 알아내서 연산 수행
//{필드.$.필드}
ex) {"comments.$.author":"Jim"}


MongoDB의 객체

  • {}안에 있는 것은 무조건 객체이다.
  • "필드 : 값"으로 이루어져있다.


갱신은 "원자적(all or Nothing)"으로 이루어짐
갱신은 서버에 먼저 도착한 요청이 적용된 후 다음 요청이 적용(타임 스탬프)

replaceOne() - document 수정

  • 첫번째 매개변수 : 필터(쿼리)
  • 두번 쨰 매개변수 : 교체할 document
db.컬렉션.replaceOne(
	{query},
    {replacement},
    {upsert:Boolean , writeConcern : <document>, collation: <document>}
)


updateOne(), updateMany() - document 갱신

  • 첫번째 매개변수 : 필터(쿼리)
  • 두번 쨰 매개변수 : 수정자 document
  • 특정 필드의 값을 바꾸거나 증/감, 필드의 이름을 변경하거나 삭제하는 기능을 수행한다.
  • updateOne은 한개 갱신
  • updateMany는 전체 갱신
db.collection.updateOne (
	{ query },
	{ update },
	{upsert:Boolean , writeConcern : <document>, collation: <document>, arrayFilters : [...] }
)
db.collection.updateMany (
	{ query },
	{ update },
	{upsert:Boolean , writeConcern : <document>, collation: <document>, arrayFilters : [...]}
)
  • {update} 기술 규칙
    • {$수정 연산자 : {갱신할 필드 : 값}}
수정연산자 기능
$rename 필드의 이름 수정
$inc 숫자 필드의 값을 증가(양수)/감소(음수)
$set 필드의 값을 수정하거나 생성
$push 배열 연산자, 이미 존재하면 끝에 요소 추가 없으면 배열 생성
$unset 필드를 삭제
$pop 배열에서 요소 제거(처음이나 끝에서 제거 가능)
$ne 특정 값이 배열에 존재하지 않을 때 해당 값 추가
$pull 배열에서 값에 따라 제거하기
$addToSet 기능은 $ne와 동일하나, 배열에 값이 없을 떄 추가
$setOnInsert 도큐먼트가 생성될 때 필드 값 설정

$rename

db.컬렉션.updateOne({Qurey},{$rename:{기존이름:바꿀이름}}


$inc

db.컬렉션.updateOne({query},{$inc:{필드:양수 or 음수}})
// 양수 덧셈
// 음수 뺄셈


$set

db.컬렉션.updateOne({query},{$set:{바꿀 필드:바꿀 값}})


$push

db.컬렉션.updateOne({query},{$push:{추가 할 필드 : 값}})


$unset

db.컬렉션.updateOne({query},{$unset: {삭제할 필드:1}}

$pull

db.컬렉션.updateOne({query},{$pull:{필드(배열을 값으로 가진):배열의 요소}}


$ne

db.컬렉션.updateOne({필드(배열을 값으로 가진) : {$ne: 비교할 값}},{$수정연산자 : {~}}
// 특정 값이 배열에 존재하지 않을 때 해당 값 추가
집합에는 동일한 두 개의 요소가 존재하지 않음.
배열을 집합처럼 처리하는 방법.

$addToSet

$db.컬렉션.updateOne({검사할 필드 : 값},{$addToSet:{추가할 필드 : 필드에 추가될 값}} 
$ne가 작동하지 않을 때 사용한다.
$ne와 동일한 기능을 가졌다.

$pop

db.컬렉션.updateOne({query},{$pop:{1 or -1}}}
// 1은 제일 앞
// -1은 제일 뒤
 


$setOnInsert

db.컬렉션.updateOne({query},{$setOnInsert:{필드 : 값}},{upsert:true})
// 도큐먼트가 생성될 때 필드가 설정되어야하는 경우에 사용함.
// 생성 후 갱신에 필드를 갱신하지 않아야 할 때 사용.





upsert 속성

  • update + insert
  • 교체하거나 수정할 도큐먼트가 존재하면 설정된 조건대로 수정, 존재하지 않으면 새로 생성한다.
{upsert:true}

728x90
반응형