Spring Boot中的动态MongoDB集合

时间:2018-01-09 09:15:21

标签: spring mongodb spring-boot

我想动态地为每个月创建一个MongoDB集合。 示例:viewLog_01_2018,viewLog_02_2018

@Document(collection = "#{viewLogRepositoryImpl.getCollectionName()}")
@CompoundIndexes({
    @CompoundIndex(def = "{'viewer':1, 'viewed':1}", name = "viewerViewedIndex",unique=true)
})
public class ViewLog {

    private Integer viewer;
    private Integer viewed;
    private Date time;

    public Integer getViewer() {
        return viewer;
    }
    public void setViewer(Integer viewer) {
        this.viewer = viewer;
    }
    public Integer getViewed() {
        return viewed;
    }
    public void setViewed(Integer viewed) {
        this.viewed = viewed;
    }
    public Date getTime() {
        return time;
    }
    public void setTime(Date time) {
        this.time = time;
    }
}

集合名称的实现如下:

@Repository
public class ViewLogRepositoryImpl implements ViewLogRepositoryCustom {

    private String collectionName;

    public ViewLogRepositoryImpl() {
        CommonUtility common = new CommonUtility();
        Pair<Integer, Integer> pair = common.getStartingEndingDateOfMonth();
        setCollectionName("viewLog_"+pair.getFirst()+"_"+pair.getSecond());
    }

    @Override
    public String getCollectionName() {
        return collectionName;
    }

    @Override
    public void setCollectionName(String collectionName) {
        this.collectionName = collectionName;
    }

}

在我的每个请求中,为了保存文档,我将集合名称设置为:

@Autowired
    ViewLogRepository viewLogRepository;

    public boolean createLog(int viewer, int viewed,String viewed_mmm, Date time){
        CommonUtility common = new CommonUtility();
        Pair<Integer, Integer> pair = common.getStartingEndingDateOfMonth();
        viewLogRepository.setCollectionName("viewLog_"+pair.getFirst()+"_"+pair.getSecond());
        ViewLog viewLog = new ViewLog();
        viewLog.setViewer(viewer);
        viewLog.setViewed(viewed);
        viewLog.setTime(time);                  
        ViewLog viewLog2 = viewLogRepository.save(viewLog);
        return true;
    }

我面临的问题是,当我第一次启动我的服务时,创建的mongo集合具有字段'viewer'和'Viewed'的唯一属性,但对于动态创建的任何后续集合,该文档没有唯一约束,并且可以插入相同的查看者查看组合的多个条目。

非常感谢任何帮助。

0 个答案:

没有答案