我正在使用Java的RethinkDB驱动程序。我想过滤表endedAt中不包含字段jam的行,如下所示:

public List<Jam> getCurrent(){
        Cursor cursor = r.table("jam")
                .filter(row -> row.hasFields("endedAt")).not()
                .run(conn);
        List<Map<String,Object>> list=cursor.toList();
        return list.stream().map(item->JamRepository.toJam(item)).collect(Collectors.toList());
    }


我有这个错误Expected type DATUM but found SELECTION Java

我在另一个类中有另一个过滤器功能:

public List<Speedlog> getByTime(long time){
        Cursor cursor = r.table("speedlog")
                .filter(row -> row.g("createdAt").eq(time))
                .run(conn);
        List<Map<String,Object>> list=cursor.toList();
        return list.stream().map(item->SpeedlogRepository.toSpeedlog(item)).collect(Collectors.toList());
    }


此功能正常工作

谁能解释一下这两者之间的区别是什么?为什么getCurrent函数会收到该错误?它的含义是什么?如何解决?谢谢

最佳答案

not()应该紧跟在row.hasFields("endedAt")之后。现在,您正在尝试在not()函数的结果上调用filter。因此,正确的代码:

public List<Jam> getCurrent(){
        Cursor cursor = r.table("jam")
                .filter(row -> row.hasFields("endedAt").not())
                .run(conn);
        List<Map<String,Object>> list=cursor.toList();
        return list.stream().map(item->JamRepository.toJam(item)).collect(Collectors.toList());
}

07-27 13:45