특정 값을 포함하지 않는 배열을 가진 문서 찾기
다음과 같은 모델이 있습니다.
var PersonSchema = new Schema({
name: String,
groups: [
{type: Schema.Types.ObjectId, ref: 'Group'}
],
});
특정 그룹에 속하지 않는 모든 사용자(즉, 사용자의 그룹 배열에 지정된 그룹의 ID가 포함되어 있지 않음)를 검색하는 쿼리를 찾고 있습니다.
저는 이런 것에 대해 생각하고 있었지만, 그것이 정확한지 확신할 수 없습니다.
Person.find({groups: {$nin: [group._id]})
기본적으로 시도하는 것에 문제가 있는 것은 아니지만, 여기서 유일하게 설명할 수 있는 것은 배열을 조회하거나 좋아요 연산자가 필요하다는 일반적인 오해입니다.
또한 여기서 정말로 해야 할 일은 다음과 같은 기본적인 불평등 일치입니다.
Person.find({ "groups": { "$ne": group._id } })
"array" 연산자는 "array target"을 위한 것이 아니라 편리한 형태로 테스트할 조건의 "list"를 제공하기 위한 것입니다.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
단일 조건에 대해 정규 연산자를 사용하면 저장할 수 있습니다.$in
그리고.$nin
단일 값 또는 리스트에 대해 둘 이상의 조건을 검정하려는 경우.그래서 그 반대입니다.
제공된 목록에 있는 인수 중 "없음"이 배열 내용과 일치하는 인수의 "목록"을 전달해야 하는 경우 연산자와 연산자의 논리를 반대로 적용합니다.
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
따라서 제공된 "목록 중 하나도"가 배열에 없음을 의미합니다.
Mongoose v5.11에서 이 작업을 수행하는 더 나은 방법은 다음과 같습니다.
Person.find({ occupation: /host/ }).where('groups').nin(['group1', 'group2']);
코드가 더 명확해지고 가독성이 더 높아집니다.
언급URL : https://stackoverflow.com/questions/26481326/find-documents-with-array-that-doesnt-contains-a-specific-value
'source' 카테고리의 다른 글
루비에서 선행 0을 출력하려면 어떻게 해야 합니까? (0) | 2023.06.25 |
---|---|
파이썬 SciPy는 BLAS가 필요합니까? (0) | 2023.06.25 |
MongoDB(MongoDB+Node js 콤보)에 삽입하기 전에 사용자 입력을 검사해야 합니까? (0) | 2023.06.25 |
스프링 부팅 시 최대 절전 모드를 사용하여 자동 UUID를 생성하는 방법 (0) | 2023.06.25 |
Oracle sqlplus에서 sql 스크립트의 실행 시간 가져오기 (0) | 2023.06.25 |