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