通过RethinkDB中的Horizo​​nIO查找记录而不返回结果

Lau*_*ens 6 typescript rethinkdb horizon angular

我有一个MeetingService,通过Horizo​​nIO从我的RethinkDB中获取数据.当尝试通过其ID获取会议时,我将始终获得null值作为响应.此服务中的其他方法无问题.

meeting.service.ts:

getMeetingById(passedId: string): Observable<Meeting[]> {
    return this.table.find({meetingId: passedId}).fetch();
}
Run Code Online (Sandbox Code Playgroud)

会议-detail.component.ts:

currentMeeting: Meeting;

getCurrentMeeting(): void {
    this._meetingsService.getMeetingById(this.passedId).subscribe(
        (returnMeetings: Meeting[]) => {
            this.currentMeeting = returnMeetings[0];
        }
    );
}
Run Code Online (Sandbox Code Playgroud)

即使我将passId更改为我直接从我的数据库(通过管理面板)获取的ID,该方法仍然返回null.

如果我更改代码以返回表中的第一个值,一切都会起作用.

getMeetingById(passedId: string): Observable<Meeting[]> {
    return this.table.order("meetingId", "descending").limit(1).fetch();
}
Run Code Online (Sandbox Code Playgroud)

最终结果是在我的视图中currentMeeting var上未定义错误:

EXCEPTION: Error in ./MeetingDetailComponent class MeetingDetailComponent - inline template:1:4 caused by: 
Cannot read property 'meetingId' of undefined
Run Code Online (Sandbox Code Playgroud)

编辑:显示不同实现的附加代码:

load() {
    if(this.passedId != null) {
      this._feedService.GetFeedById(this.passedId).subscribe(
          (returnFeed: Feed[]) => {
            this.currentFeed = returnFeed[0];
          }
      );
    } else {
      this._feedService.GetFirstFeed().subscribe(
          (returnFeed: Feed[]) => {
            this.currentFeed = returnFeed[0];
          }
      );
   }
}
Run Code Online (Sandbox Code Playgroud)

第二个工作,第一个不工作.传递的ID是正确的,并且在数据库中也可用,因此这非常令人困惑.

提前致谢.

Lau*_*ens 3

尽管似乎没有人关心这个问题,但我找到了一个相对有效的答案。我的临时修复涉及获取整个表并通过每个表手动查找正确的 id,但也可以这样:

  1. 创建一个变量,它是您需要的表的可观察变量(通过 .watch())
  2. 调用 flatMap() 并获取可观察数组(如果有人知道为什么这是必要的,请告诉我)
  3. 使用 find() 和 lambda 来调用正确的 id。

    getMeetingById(passedId: string): Observable<IMeeting> {
        var allMeetings: Observable<Meeting[]>;
        allMeetings = this.table.watch();
    
        return allMeetings.flatMap((meetings: IMeeting[]) => Observable.from(meetings))
                          .find((meeting: IMeeting) => (meeting.id == passedId));
    
    }
    
    Run Code Online (Sandbox Code Playgroud)