다음 두 단계를 사용하여 인덱스로 배열 요소를 제거할 수 있습니다. -
첫 번째 단계는 다음과 같습니다 -
db.yourCollectionName.update({}, {$unset :{"yourArrayFieldName.yourIndexValue" :1 }});
위의 구문은 'yourIndexValue' 위치에 null 값을 넣습니다. 그런 다음 배열 요소에서 제거하려면 배열 필드에서 null 값을 가져와야 합니다.
두 번째 단계는 다음과 같습니다 -
db.yourCollectionName.update({}, {$pull :{"yourArrayFieldName" :null}});
구문을 구현하기 위해 문서로 컬렉션을 생성해 보겠습니다. 문서로 컬렉션을 생성하는 쿼리는 다음과 같습니다 -
> db.removeArrayElementByItsIndexDemo.insertOne({"강사명":"데이비드", "강사제":28,"강사제":["몽고DB","MySQL","자바","SQL 서버","PL/ SQL"]});{ "승인됨" :true, "insertedId" :ObjectId("5c8abbfc6cea1f28b7aa0803")}
find() 메서드를 사용하여 컬렉션의 모든 문서를 표시합니다. 쿼리는 다음과 같습니다 -
> db.removeArrayElementByItsIndexDemo.find().pretty();
다음은 출력입니다 -
{ "_id":ObjectId("5c8abbfc6cea1f28b7aa0803"), "InstructorName":"David", "InstructorAge":28, "InstructorSubject":[ "MongoDB", "MySQL", "자바", "SQL 서버" , "PL/SQL" ]}
다음은 인덱스로 배열 요소를 제거하는 쿼리입니다.
1단계 - 쿼리는 다음과 같습니다 -
> db.removeArrayElementByItsIndexDemo.update({}, {$unset :{"InstructorSubject.2" :1 }});WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 } )
2단계 − 쿼리는 다음과 같습니다. −
> db.removeArrayElementByItsIndexDemo.update({}, {$pull :{"InstructorSubject" :null}});WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })사전>배열 요소 "Java"가 제거되었는지 확인합시다. 쿼리는 다음과 같습니다 -
> db.removeArrayElementByItsIndexDemo.find().pretty();다음은 출력입니다 -
{ "_id" :ObjectId("5c8abbfc6cea1f28b7aa0803"), "InstructorName":"David", "InstructorAge":28, "InstructorSubject":[ "MongoDB", "MySQL", "SQL 서버", "PL/ SQL" ]}샘플 출력을 보면 "Java" 배열 요소가 완전히 제거되었습니다.