Computer >> 컴퓨터 >  >> 프로그램 작성 >> MongoDB

MongoDB의 정확한 요소 배열에서 필드를 업데이트하시겠습니까?

<시간/>

아래 명령문을 사용하여 MongoDB에서 in 정확한 요소 배열을 업데이트할 수 있습니다. 구문은 다음과 같습니다.

{"yourArrayDocumentName.$.yourNestedArrayDocument.yourPosition":"yourValue"}});

위의 구문을 이해하기 위해 몇 가지 문서로 컬렉션을 만들어 보겠습니다. 문서로 컬렉션을 생성하는 쿼리는 다음과 같습니다.

> db.updateExactField.insertOne({"ActorId":1,"ActorDetails":[{"ActorName":"Johnny Depp","MovieList":["The Tourist","Public Enemy"]},. .. {"배우 이름":"크리스 에반스","영화 목록":["캡틴 아메리카","어벤져스"]}]});{ "승인됨" :true, "insertedId" :ObjectId("5c6d7f63f2db199c1278e7f1")} 

이제 find() 메서드를 사용하여 컬렉션의 문서를 표시할 수 있습니다. 쿼리는 다음과 같습니다.

> db.updateExactField.find().pretty();

다음은 출력입니다.

{ "_id" :ObjectId("5c6d7f63f2db199c1278e7f1"), "ActorId" :1, "ActorDetails" :[ { "ActorName" :"Johnny Depp", "MovieList" :[ "관광객", "공공의 적" ] }, { "배우 이름" :"크리스 에반스", "MovieList" :[ "캡틴 아메리카", "어벤져스" ] } ]}

사례 1 :여기에서 정확한 배열 요소, 즉 배열이 0부터 시작하기 때문에 인덱스 2인 3번째 위치로 업데이트합니다. 쿼리는 다음과 같습니다.

> db.updateExactField.update(... {"ActorDetails.ActorName":"Chris Evans"},... {$set:... {"ActorDetails.$.MovieList.2":"어벤져스:인피니티 워"}});WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

find()를 사용하여 컬렉션의 문서를 표시해 보겠습니다. 쿼리는 다음과 같습니다.

> db.updateExactField.find().pretty();

다음은 출력입니다.

{ "_id" :ObjectId("5c6d7f63f2db199c1278e7f1"), "ActorId" :1, "ActorDetails" :[ { "ActorName" :"Johnny Depp", "MovieList" :[ "관광객", "공공의 적" ] }, { "배우 이름" :"크리스 에반스", "MovieList" :[ "캡틴 아메리카", "어벤져스", "어벤져스:인피니티 워" ] } ]}

위의 출력을 보면 "Avengers:Infinite War" 값이 위치 3, 즉 인덱스 2에 있습니다.

사례 2 :이제 인덱스 1, 즉 위치 2로 업데이트합시다. 쿼리는 다음과 같습니다.

> db.updateExactField.update({"ActorDetails.ActorName":"Chris Evans"}, {$set:{"ActorDetails.$.MovieList.1":"Gifted"}});WriteResult({ "nMatched " :1, "nUpserted" :0, "nModified" :1 })

find() 메서드를 사용하여 컬렉션에서 문서를 확인합시다. 쿼리는 다음과 같습니다.

> db.updateExactField.find().pretty();

다음은 출력입니다.

{ "_id" :ObjectId("5c6d7f63f2db199c1278e7f1"), "ActorId" :1, "ActorDetails" :[ { "ActorName" :"Johnny Depp", "MovieList" :[ "관광객", "공공의 적" ] }, { "배우 이름" :"크리스 에반스", "영화 목록" :[ "캡틴 아메리카", "기프트", "어벤져스:인피니티 워" ] } ]}

위의 샘플 출력을 보면 "Gifted" 값은 위치 2, 즉 인덱스 1에 있습니다.