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

  • 相关阅读:
    freebsd ports update url
    Cisco交换机里IP和MAC地址互查找出对应端口
    实现不同vlan间的相互通信方法一:单臂路由
    文件共享③Samba实例
    RHEL6基础四十九之RHEL文件(夹)权限进阶篇
    windows下查找指定端口被哪个程序占用
    DNSmasq – 配置DNS和DHCP
    dnsmasq多vlan配置
    dnsmasq.conf 配置
    windows2003 DHCP中批处理绑定IP与MAC
  • 原文地址:https://www.cnblogs.com/mortre/p/10030543.html
Copyright © 2011-2022 走看看