source

특정 값을 포함하지 않는 배열을 가진 문서 찾기

manycodes 2023. 6. 25. 20:15
반응형

특정 값을 포함하지 않는 배열을 가진 문서 찾기

다음과 같은 모델이 있습니다.

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

반응형