mongoose로 updateMany 명령을 수행 할 때 where 쿼리에 무엇을 지정해야하는지 궁금합니다.
예를 들어 다음과 같은 업데이트 작업이 있습니다. { $pull: { tags: { $in: ["tagone", "tagtwo"] } } }
where 쿼리는 다음과 같아야합니다.
{organisation: "fffffff..."}
또는 {organisation: "fffffff...", tags: {$in: ["tagone", "tagtwo"]}
where 쿼리의 추가 특이성은 성능을 향상 또는 감소 시키거나 차이를 만들지 않습니까?
(데이터베이스 색인이 적용되지 않음)
내가 아는 것을 몇 가지 넣을 것입니다. 개선 사항이 있으면 업데이트하십시오.
1) 필터를 지정하지 않고 인덱스가 없으면 쿼리가 컬렉션의 모든 문서를 반복하여 tags
입력 배열에 전달 된 값 을 배열로 살펴보고 해당 값이있는 경우 가져옵니다. tags
. 모든 문서 tags
배열에서 값을 검색해야합니다.
2) 필터가있는 경우-인덱스가 활성화되지 않았더라도 쿼리는 컬렉션의 모든 문서를 스캔해야합니다. collection scan
그런 다음 필터링 된 문서 (일치하는 문서는 필터 제공) 및 tags
배열 업데이트 .
컬렉션의 인덱스와 쿼리의 필터가 필요한 이유는 무엇입니까?
우선 인덱스를 적용하지 않고 왜 그렇게하고 싶습니까? 모든 컬렉션은 올바르게 인덱싱되어야합니다.
메모리의 인덱스 키 (인덱싱 된 필드의 값)를 반복하고 디스크에서 실제 문서를 가져 와서 업데이트하고 인덱스를 사용하여 다시 쓰는 것이 빠르며, 반면에 필터를 사용하면 쿼리가 더 적은 문서 또는 인덱스 키를 통해 실행될 수 있습니다. 인덱싱 됨) 업데이트를 처리하거나 추가 단계에서 문서의 변환에 대한 집계의 경우.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다