Java實現MongoDB中自增長欄位

來源:互聯網
上載者:User

在資料庫設計原理中;自增長欄位的目的是為了unique的索引來判斷每條記錄唯一性;同時保證大資料庫量的時候的查詢速度。

但在Oracle和mongodb資料庫中有單獨的欄位判斷唯一性;所以設計中沒有自增長欄位方式(mysql和mssql都有);並且也不提倡用自增長欄位設計表結構。

不過經常用習慣這種方式的程式員;oracle和mongodb資料庫也可以實作類別似的功能;oracle中有sequence方式。

那我們也可以試試在mongodb資料庫中實現自增長欄位模式;就是模仿一下oracle中有sequence方式。

1:在mongodb資料庫中建立一個名為:sequence的collection;
    2個field:coll_name(記錄其它collection名字)和cnt(其它collection的自增長欄位最大序號)。
2:java代碼:
     //得到使用者表的sequence 自增長id
    private static int getSequence(String tableName){
        DBCollection table = conn.getDb().getCollection("sequence");
        DBObject query = new BasicDBObject();
        query.put("coll_name", tableName);
        DBObject newDocument =new BasicDBObject();
        newDocument.put("$inc", new BasicDBObject().append("cnt", 1));
        DBObject ret = table.findAndModify(query, newDocument);
        if (ret == null){
            return 0;
        }else{
            return (Integer)ret.get("cnt") + 1;
        }
    }

   //新增使用者
    public static void addUser(UserInfo user){
        int id = getSequence("admin_user");
        if(id != 0){
            DBCollection table = conn.getDb().getCollection("admin_user");
            DBObject query = new BasicDBObject();
            query.put("id", id);
            query.put("name", user.getName());
            query.put("e_mail", user.geteEmail());
            query.put("passwd", user.getPassword());
            query.put("is_del", false);
            query.put("create_time", user.getCreateTime());
            table.insert(query);
        }
    }

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.