У меня есть две коллекции, к которым я пытаюсь присоединиться. Обзор комментариев и пользователей.

Вот код в моем сервисе:

getAll(reviewID) { const allComments = this.af.collection{amp}lt;Review{amp}gt;(`reviews/${reviewID}/comments`, ref ={amp}gt; ref.orderBy('dateCreated', 'desc')) .valueChanges() .pipe( switchMap(reviews ={amp}gt; { const res = reviews.map((review: review) ={amp}gt; { return this.af.collection{amp}lt;User{amp}gt;('users', ref ={amp}gt; ref.where('userID', '==', review.userID)) .valueChanges() .pipe( map(user ={amp}gt; Object.assign(review, { user })) ); }); return combineLatest(...res); }) ); return allComments; } 

Вот мой компонент:

 this.commentService.getAll(reviewID).subscribe(results ={amp}gt; { this.comments = results; this.logger.log(this.comments); }); 

В основном это работает, но кажется, что пользовательский массив возвращает каждый второй комментарий.

Например:

 0: comment: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse id quam ut lacus tempor aliquam. Curabitur efficitur, lorem sit amet sodales finibus, erat arcu imperdiet dolor, eget ultricies arcu felis sit amet enim. Interdum et malesuada fames ac ante ipsum primis in faucibus." dateCreated: Timestamp {seconds: 1549654515, nanoseconds: 0} userID: "c8Y3q9Mn0sdfGFDgMWqh4GqJC5B2" user: Array(0) 1: comment: "this is the third comment" dateCreated: Timestamp {seconds: 1549638673, nanoseconds: 0} userID: "KEPBML9xlDfgedGZAslzOfOfbSwh2" user: Array(1) 0: {avatar: "img.jpg", fullname: "Michael Jones", userID: "KEPBML9xlDfgedGZAslzOfOfbSwh2", username: "michaelj"} 2: comment: "this is the second comment" dateCreated: Timestamp {seconds: 1549562400, nanoseconds: 0} userID: "NbPyKuTIB5dfGDGdVNmEB1h5YG2" user: Array(0) 3: comment: "this is the first comment" dateCreated: Timestamp {seconds: 1549558800, nanoseconds: 0} userID: "N2FhiRSJcdfGEDRgrCvPZa98bU4Im2" user: Array(1) 0: {avatar: "img.jp", fullname: "Emily Jones", userID: "N2FhiRSJcdfGEDRgrCvPZa98bU4Im2", username: "emilyj"} 

Я подтвердил, что все идентификаторы пользователя передаются.

Я делаю что-то неправильно? Я не уверен, что мне не хватает, любая помощь будет оценена.

Я наконец-то понял. Не уверен, что я не думал об этом раньше.

Чтобы исправить это я изменил:

this.af.collection{amp}lt;User{amp}gt;('users', ref ={amp}gt; ref.where('userID', '==', review.userID))

в

this.af.doc{amp}lt;User{amp}gt;( users / $ {review.userID} )