让我们假设以下结构:
用户类:
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
答案 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)));