티스토리 뷰

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
반응형
댓글