작동하지 찾기이 내 모델 :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"를 사용하는 것과 같은 몇 가지 다른 해결책이 테스트되었지만 여전히 모든 레코드가 반환됩니다.
'.find()'질의는 반환 된 배열 내용을 "필터링"하지 않습니다. 그 작업은 ['$ filter'] (https://docs.mongodb.com/manual/reference/operator/aggregation/filter/)에 속합니다. –
''레코드'문서에'date'가 저장된 형식을 확인하십시오. Mongo에서 필드의 필터 조건이 형식과 일치하지 않으면 전체 컬렉션을 반환합니다. – Abhishek
@Abhishek 해당 형식으로 저장 됨 날짜 – Don