본문 바로가기

과목/빅데이터

MongoDB findOneAndUpdate


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
    "_id" : ObjectId("5b77cf25cdc3bb21d0354be2"),
    "title" : "newnew",
    "updated" : [ ],
    "date" : ISODate("2018-08-18T16:47:49.841+09:00"),
    "count" : 389,
    "contents" : "new",
    "__v" : 18,
    "writer" : null,
    "comments" : [
        {
            "name" : "글쓴이",
            "memo" : "!!!",
            "_id" : ObjectId("5b7be66d9ff77a3834943b8b"),
            "date" : ISODate("2018-08-21T19:16:13.788+09:00")
        }
    ],
}
cs

comments Array field의 한 요소를 선택하고 그 요소에 대한 특정 field를 수정하고 싶다면

findOneAndUpdate()를 쓴다.


첫번째 객체로 찾고자 하는 field에 대한 설정을 한다. 첫 객체의 _id는 document의 id이다.


찾은 값을 바탕으로 $set을 쓴다. 찾은 comment의 한 요소를 특정하고 memo에 !!!을 써준다.


arrayFilters는 _id로 찾은 document에서 입력된 _id와 일치하는 것을 찾는다.


1. document를 _id로 찾고

2. arrayFilter에서 배열의 요소 중에 _id와 일치하는 것을 찾고

3. 찾은 배열 요소의 memo에 들어갈 값을 설정해준다. 


1
2
3
4
5
6
7
8
db.boards.findOneAndUpdate(
    {
        _id:ObjectId("5b77cf25cdc3bb21d0354be2")
    },
     {$set:{"comments.$[element].memo":'!!!'}},
     {arrayFilters:[{"element._id":ObjectId("5b7be66d9ff77a3834943b8b")}]}
)
cs









https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/