programing

Mongoose는 array.length가 0보다 큰 모든 문서를 찾고 데이터를 정렬합니다.

showcode 2023. 6. 19. 21:46
반응형

Mongoose는 array.length가 0보다 큰 모든 문서를 찾고 데이터를 정렬합니다.

저는 MongoDB에서 CRUD 작업을 수행하기 위해 mongoose를 사용하고 있습니다.이것이 제 스키마입니다.

var EmployeeSchema = new Schema({
      name: String,
      description: {
        type: String,
        default: 'No description'
      },
      departments: []

    });

각 직원은 여러 부서에 속할 수 있습니다.부서 배열은 [1,2,3]과 같습니다.이 경우 departments.length = 3. 직원이 부서에 속하지 않는 경우 departments.length는 0과 같습니다.

EmployeeSchema.departments.length > 0 및 쿼리가 10개 이상의 레코드를 반환하는 경우 최대 부서 수가 없는 직원만 찾으면 됩니다.

Mongoose.find()를 사용하여 원하는 결과를 얻을 수 있습니까?

모형의 호출을 가정합니다.Employee:

Employee.find({ "departments.0": { "$exists": true } },function(err,docs) {

})

요청에 따라0배열의 인덱스입니다. 즉, 배열에 무언가가 있다는 것을 의미합니다.

최대 숫자에도 동일하게 적용됩니다.

Employee.find({ "departments.9": { "$exists": true } },function(err,docs) {

})

따라서 일치시키려면 배열에 최소 10개의 항목이 있어야 합니다.

정말이지 배열 길이를 기록하고 무언가가 추가될 때마다 업데이트해야 합니다.그러면 다음을 수행할 수 있습니다.

Employee.find({ "departmentsLength": { "$gt": 0 } },function(err,docs) {

})

저장하는 "departmentsLength" 속성.이 속성은 인덱싱할 수 있으므로 훨씬 더 효율적입니다.

어떤 이유에서인지 현재로서는 선택한 답변이 작동하지 않습니다.$size 연산자가 있습니다.

용도:

collection.find({ field: { $size: 1 } });

길이가 1인 배열을 찾습니다.

다음과 같이 $where를 사용할 수 있습니다.

await EmployeeSchema.find( {$where:'this.departments.length>0'} )

어레이 길이가 1보다 큰 경우 아래와 같이 할 수 있습니다.

db.collection.find({ "arrayField.1" : { $exists: true }})

위의 쿼리는 배열 필드에 첫 번째 인덱스 값이 있는지 확인합니다. 즉, 배열에 항목이 두 개 이상 있음을 의미합니다.참고: 배열 인덱스는 0부터 시작합니다.

언급URL : https://stackoverflow.com/questions/31677061/mongoose-find-all-documents-where-array-length-is-greater-than-0-sort-the-data

반응형