2017-11-09 8 views
-1

작동하지 찾기이 내 모델 :Mangoose 중첩이

UserModel = mongoose.Document & { 
    username: string, 
    password: string, 
    records: Record[] 
}; 
Record: { 
    name: string; 
    date: Date; 
} 

검색어 :

const date = new Date(); 
    const lastDate = new Date(date.getTime() - (30 * 24 * 60 * 60 * 1000)); 
    UserModel.find({ "records" : { "$elemMatch": { "date" : { "$gte": lastDate } } }}, (err, userRecords: any) => { 
    if (err) { 
     return res.json({ 
      "status": "error", 
      "detail": err 
     }); 
    } 
    return res.json({ 
     "records": userRecords 
    }); 
    }); 

이 쿼리가 아니라 단지 지난 30 일 동안의 기록보다, 모든 레코드를 반환합니다. 내가 잘못 가고있는 곳을 찾을 수 없습니다.

편집 : 위의 "lastDate"에서 "lastDate.toISOString()"을 사용한 후에도 여전히 결과가 모두 반환됩니다.

편집 : "$ filter"를 사용하는 것과 같은 몇 가지 다른 해결책이 테스트되었지만 여전히 모든 레코드가 반환됩니다.

+0

'.find()'질의는 반환 된 배열 내용을 "필터링"하지 않습니다. 그 작업은 ['$ filter'] (https://docs.mongodb.com/manual/reference/operator/aggregation/filter/)에 속합니다. –

+0

''레코드'문서에'date'가 저장된 형식을 확인하십시오. Mongo에서 필드의 필터 조건이 형식과 일치하지 않으면 전체 컬렉션을 반환합니다. – Abhishek

+0

@Abhishek 해당 형식으로 저장 됨 날짜 – Don

답변

0

DB에 저장된 ISO 형식으로 날짜를 변환해야 작동합니다.

+0

"{"$ gte ": lastDate.toISOString()}"변경 후 이제 레코드가 반환되지 않습니다. 이 기능이 작동하는지 확인하기 위해 날짜를 저장하는 동안 모든 조치를 취해야합니까? – Don

+0

db에 저장된 날짜 형식은 무엇입니까? –

+0

ISO 날짜 형식 – Don