在資料庫設計原理中;自增長欄位的目的是為了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);
}
}