Java中如何从MongoDB的words集合随机获取name字段的单词值
问题修复方案
错误原因
- 没有接收
aggregate()方法返回的聚合查询结果,执行的随机抽样操作结果被直接丢弃 - 错误返回了集合对象
wordCollection本身的toString结果,而非查询到的单词数据,所以输出了类名+内存地址的字符串
修正后的chooseRandomWord()方法代码
public String chooseRandomWord() { // 执行随机抽样聚合查询,抽取1条数据 Document randomDoc = wordCollection.aggregate(Arrays.asList(Aggregates.sample(1))).first(); // 判空处理,防止集合为空、数据库连接异常时报错 if (randomDoc != null) { // 读取name字段存储的单词内容返回 return randomDoc.getString("name"); } // 兜底逻辑:数据库查询异常时, fallback到本地定义的words数组随机取词 int randomNumber = new Random().nextInt(words.length); return words[randomNumber]; }
补充说明
aggregate()返回的是AggregateIterable迭代对象,调用first()可以直接拿到抽样出的第一条文档数据- 新增的兜底逻辑可以避免MongoDB服务异常、集合为空等场景导致程序直接崩溃
内容的提问来源于stack exchange,提问作者minal.m
相关产品推荐
相关产品推荐

