Java驱动中r.row未实现,需用Lambda语法改写RethinkDB查询
解决RethinkDB Java驱动中r.row未实现的问题
我完全懂你遇到的麻烦——RethinkDB的Java驱动确实没实现r.row语法,不过咱们用Lambda表达式就能完美替代,还能保持原有的查询逻辑不变。
改写后的完整代码
import com.rethinkdb.net.Connection; import com.rethinkdb.net.Cursor; import static com.rethinkdb.RethinkDB.r; // ... 你的connector和connection初始化代码 ... Cursor<String> cursor = r.db("squirrel") .table("knownurifilter") // 注:当前指定的"uri"索引对timestampNextCrawl的过滤没有优化作用, // 如果这个查询是高频操作,建议给timestampNextCrawl字段单独创建索引 .optArg("index", "uri") // 用Lambda参数doc替代r.row,doc代表当前遍历的文档对象 .filter(doc -> doc.g("timestampNextCrawl").le(System.currentTimeMillis())) // 提取uri字段并转换为Java String类型,保证Cursor<String>类型匹配 .map(doc -> doc.g("uri").string()) .run(connector.connection);
关键改动说明
- 替换r.row:在
filter方法中传入Lambda表达式,参数doc就对应原代码里的r.row,通过doc.g("字段名")就能访问文档中的属性。 - 类型匹配优化:原代码的
.g("uri")返回的是Expr对象,加上.string()可以明确转换为Java的String类型,确保和Cursor<String>的泛型类型一致。 - 索引优化提示:你现在指定的
uri索引对时间戳的过滤没有帮助,如果这个查询经常执行,建议给timestampNextCrawl创建索引,能大幅提升查询效率。
如果还有其他疑问,随时提出来!
内容的提问来源于stack exchange,提问作者Philip Frerk
相关产品推荐
相关产品推荐

