Heim  >  Artikel  >  Datenbank  >  Java实现MongoDB中自增长字段

Java实现MongoDB中自增长字段

WBOY
WBOYOriginal
2016-06-07 17:13:521085Durchsuche

但在oracle和mongodb数据库中有单独的字段判断唯一性;所以设计中没有自增长字段方式(mysql和mssql都有);并且也不提倡用自增长

在数据库设计原理中;自增长字段的目的是为了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);
        }
    }

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn