티스토리 뷰
728x90
반응형
아래 query 문은 users 라는 collection에 존재하는 모든 documents 들의 userid 필드를 email 필드의 값으로 수정하라는 것입니다. 기존의 updateMany 쿼리문에서 바뀐 것은 단 하나, [ ] 대괄호가 추가된 것입니다. 대괄호가 추가되지 않으면 $email 을 이해하지 못하고, 그냥 "$email"이라는 문자열로 인식할 것입니다.
db.users.updateMany({}, [{"$set":{"userid":"$email"}}])
즉, A와 같은 documents 들이 모두 B의 documents 들로 바뀐다는 것입니다.
// A
{
"_id" : ObjectId("5fc44db8d05a6a50dc989dc7"),
"type" : "user",
"userid" : "abcd",
"email" : "abcd@naver.com",
"__v" : 0
}
{
"_id" : ObjectId("5fc44db8d05a6a50dc989dc7"),
"type" : "user",
"userid" : "test",
"email" : "test@daum.net",
"__v" : 0
}
// B
{
"_id" : ObjectId("5fc44db8d05a6a50dc989dc7"),
"type" : "user",
"userid" : "abcd@naver.com",
"email" : "abcd@naver.com",
"__v" : 0
}
{
"_id" : ObjectId("5fc44db8d05a6a50dc989dc7"),
"type" : "user",
"userid" : "test@daum.net",
"email" : "test@daum.net",
"__v" : 0
}
조금 더 말씀드리자면 아래와 같이 응용해서 사용할 수도 있습니다.
db.users.updateMany({"userid":"asdf1234"}, [{"$set":{"userid":{"$concat":["$userid","_","$type"]}}}])
만약 asdf1234 라는 계정이 존재한다면, 해당 계정의 userid 는 A에서 B로 바뀔 것입니다. $concat은 대괄호 안에 들어있는 문자열들을 모두 하나의 문자열로 만들어줍니다.
// A
{
"_id" : ObjectId("5fc44db8d05a6a50dc989dc7"),
"type" : "user",
"userid" : "asdf1234",
"email" : "asdf1234@naver.com",
"__v" : 0
}
// B
{
"_id" : ObjectId("5fc44db8d05a6a50dc989dc7"),
"type" : "user",
"userid" : "asdf1234_user",
"email" : "asdf1234@naver.com",
"__v" : 0
}
728x90
반응형
'프로그래밍 > Node.js' 카테고리의 다른 글
[Nodejs] http-proxy 프록시로 웹 출력하기 (0) | 2023.09.27 |
---|---|
[Nodejs] 프로젝트 생성하기 (0) | 2023.09.26 |
[MongoDB] find 쿼리문으로 데이터 하나만 뽑는 법 (0) | 2021.11.03 |
[Nodejs - Mongoose] Schema에서 default 값을 현재 시간으로 하는 법 (4) | 2021.07.07 |
[오류해결] Node Sass version 6.0.0 is incompatible with ^4.0.0 || ^5.0.0. (0) | 2021.05.13 |
댓글