제목에서 알 수 있듯이 사용자가 로그인했을 때 사용자로부터 특정 데이터를 얻어서 모든 데이터를 집계한 다음 집계된 데이터를 반환하려고 합니다. $match
기능을 사용해 보았지만 운이 없었습니다. 실망스러운 점은 개체 배열의 모든 데이터를 성공적으로 반환할 수 있다는 것입니다. 보다 구체적으로 다음 코드는 성공적으로 실행되고 객체 배열을 반환합니다.
하지만 이 코드는 그렇지 않습니다. 빈 배열을 반환합니다.
으아악왜 이런 일이 발생하는지 모르겠습니다. 반환해야 하는 것은 집계된 모든 데이터로 채워진 객체가 있는 배열입니다.
제거하면 $match
실행 중인 컬렉션의 모든 데이터가 성공적으로 집계된다는 것도 알고 있으므로 그와 관련이 있다고 생각합니다.
관련 코드는 모두 다음과 같습니다.
const runs = await Run.find({ user: req.user.id })
P粉7224099962024-03-23 10:52:36
그래서 rickhg12hs의 도움으로 우리는 문자열을 ObjectId와 비교하려고 했으나 작동하지 않는다는 것을 {match: { user : req.user.id } }
확인할 수 있었습니다. 제가 설정한 API가 사용자 ID를 ObjectID가 아닌 문자열로 반환하기 때문입니다. 올바른 값 유형(이 경우 ObjectID)을 비교하고 있는지 확인하려면 다음을 수행하세요.
반환된 문자열을 가져와 새 ObjectID로 변환하고 이제 ObjectID를 비교하므로 작동합니다.
분명히 문서에 있었는데, 자세히 살펴보지 못했을 뿐입니다