Java RethinkDB 需要类型 DATUM 但找到了 SELECTION

Java RethinkDB Expected type DATUM but found SELECTION

我正在为 Java 使用 RethinkDB 驱动程序。我想像这样过滤 table jam 中没有字段 endedAt 的行:

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

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

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") 之后。现在您正在尝试对 filter 函数的结果调用 not()。所以,正确的代码:

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());
}