Java RethinkDB Ожидаемая база данных типа, но найденный ВЫБОР

#java #types #rethinkdb #nosql

#java #типы #rethinkdb #nosql

Вопрос:

Я использую драйвер RethinkDB для Java. Я хочу отфильтровать строки без поля 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 функция выдает эту ошибку? В чем его значение и как исправить? Спасибо

Ответ №1:

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