zoukankan      html  css  js  c++  java
  • mongo upsert

    mongo的api在某些方面表现的异常优秀,这几天体会了一下mongo的upsert方法。

    我的目的是想在某个项号下记录每天的评论,并且能够查到某段日期间按时间倒叙排列的评论。我的设计是这样:

    1 类设计

    首先是记录每天的评论汇总

    @Document(collection="comments")
    public class Comments {
    
    @Id
    private String id;
    
    private String itemId;//项目号
    
    private String commentsDate;//评论日期格式是以yyyy-MM-dd保存
    
    private List comments;//每天的评论列表
    
    private Comment c;//评论
    
    
    //setter,getter
    }


    评论的详细信息

    public class Comment {
    
    private String userid;//用户id
    
    private String comment;//评论内容

    dao接口
    void upsert(Comments c)throws Exception; //添加每天评论

    List<Comments> selectByItemId(String itemId)throws Exception; //根据项目id查询 按日期倒叙排列


    实现

    @Override
    public void upsert(Comments c) throws Exception {
    Query query = new Query();
    query.addCriteria(Criteria.where("itemId").is(c.getItemId()));
    query.addCriteria(Criteria.where("commentsDate").is(c.getCommentsDate()));
    Update update = new Update();
    update.push("comments", c.getC());
    mongoTemplate.upsert(query, update, Comments.class);
    
    }
    
    @Override
    public List<Comments> selectByItemId(String itemId) throws Exception {
    Order order = new Order(Direction.DESC, "commentsDate");
    Sort sort = new Sort(order);
    List<Comments> list =mongoTemplate.find(new Query(Criteria.where("itemId").is(itemId)).with(sort), Comments.class);
    return list;
    }

    测试一下

    现在数据库中没有数据

     

    结果是

     

    现在修改一下评论内容其他不变

     

    数据库数据

     

    看comments的数组个数变成2了

    下面我们来修改一下日期,其它与上条数据保持一致

     

    看又增加了一条日期不同的数据哎,这正是我想要的(相同的itemid以天为单位增加数据)

    换一个itemId试试吧,其它与上条测试数据相同

     

    看数据库中,又会增加一条数据

     

    这也是我期望的结果当itemid不同的同一日期也要单独记录

    现在总结一下upsert这个api

    首先是查询itemid和commentsDate当这两个字段都一致时就会在原有的记录中修改

    当查询的这两个字段中有一个发生变化了,数据库中没有,就会使插入新数据的操作。
    ---------------------

    原文:https://blog.csdn.net/u014016716/article/details/41693161

  • 相关阅读:
    客户端回传事件接口IPostBackEventHandler
    《敏捷无敌》—— 一本非常好看的“IT技术言情小说”
    面向对象之设计
    Zac谈网络编辑需要注意的SEO技巧
    面向对象之领悟
    《网络营销实战密码》推荐
    设计模式建造者模式(builder)
    设计模式工厂方法(FactoryMethod)
    struts1.x与struts2的比较表
    设计模式原型模式(ProtoType)
  • 原文地址:https://www.cnblogs.com/mortre/p/10030543.html
Copyright © 2011-2022 走看看