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
'programing' 카테고리의 다른 글
문자열 Python에서 a: 앞에 모든 것을 가져오려면 어떻게 해야 합니까? (0) | 2023.06.19 |
---|---|
두 개의 열이 있는 LISTAGG 함수 (0) | 2023.06.19 |
virtualenv 폴더를 중단하지 않고 이름 바꾸기 (0) | 2023.06.14 |
소방서:문서 배열의 항목별 쿼리 (0) | 2023.06.14 |
루비는 진짜 멀티스레딩이 있나요? (0) | 2023.06.14 |