如何使用spring mongorepository获取随机文档?

时间:2017-11-14 19:30:31

标签: java mongodb spring-data spring-mongo spring-mongodb

让我们假设以下结构:

用户类:

public class User {

@Id
String id;
String name;
//...

}

用户存储库:

public interface UserRepository extends MongoRepository<User, String> {

List<User> findByRandom(); // this method signature does not exist but would do what I intend to do

}

用户控制器:

@Component
public class UserController {

    private UserRepository users;

      @Autowired
      public UserController(
          UserRepository users) {
        this.users= users;
      }

public List<User> getRandomUsers() {
return(users.findByRandom()); // limit is missing here
}

        }

如何从这样的结构中接收随机文档。 在文档上具有随机值的字段将不是期望的解决方案,因为值应该总是随机的(例如,如果我点击随机int值4并且接收x个以下项,那些将始终是相同的)。必须查询x次也不是首选,因为这将是太重负载。 有人可以帮忙吗?

提前致谢,

Codehai

1 个答案:

答案 0 :(得分:1)

只需使用$sample阶段:

通过Spring-Data(从v2.0开始):

SampleOperation matchStage = Aggregation.sample(5);
Aggregation aggregation = Aggregation.newAggregation(sampleStage);
AggregationResults<OutType> output = mongoTemplate.aggregate(aggregation, "collectionName", OutType.class);

直接通过Java驱动程序:

import static com.mongodb.client.model.Aggregates.*;
users.aggregate(Arrays.asList(sample(5)));