MongoDB自增主鍵id產生器的設計和實現

來源:互聯網
上載者:User

mongodb自增主鍵id產生器的設計和實現

 

文章地址: http://blog.csdn.net/5iasp/article/details/8794396

作者: javaboy2012
Email:yanek@163.com
qq:    1046011462

 

情境: 假設有如下兩個系統:

  A 系統和  B系統

採用不同的程式設計語言共同操作mongodb的一個表 如  news表

相關欄位有

news_id

name

title

desc

有個要求:

news_id的產生欄位為整數int

該id能夠通過最後一位元字區別news的類別 比如 末尾為1 表示 國內新聞 末尾為 2 表示國際新聞

下面是設計思路

初始化資料庫:

db.ids.save({name:"china_news", id:1});
db.ids.save({name:"international_news", id:2}); 

取國內新聞id: 執行如下:

db.ids.findAndModify({update:{$inc:{'id':10}}, query:{"name":"china_news"}, new:true});

取國際新聞id: 執行如下:

db.ids.findAndModify({update:{$inc:{'id':10}}, query:{"name":"international_news"}, new:true});

國內新聞的id: 格式如下

1 11 21 31 41 51 61 xx1

國際新聞id:格式如下

1 22 22 32 42 52 62 xx2

 

java代碼實現:

主要依靠:findAndModify(queryObj,update); 方法來實現自增,

package com.test;

import java.net.UnknownHostException;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

public class Test {
 
 public static String MONGODB_DATABASE_NAME = "test"; // mongodb資料庫名稱
 public static String MONGODB_SERVER_IP = "192.168.0.1"; // mongodb資料庫伺服器ip地址
 public static int MONGODB_SERVER_PORT = 17017; // mongodb資料庫伺服器連接埠
 public static String MONGODB_TABLE_NAME_IDS = "ids"; // ids表

 /**
  * @param args
  */
 public static void main(String[] args) {
  
  for(int i=0;i<10;i++)
  {
   System.out.println(getID());
   
  }
  
 }
 
 public static String getID()
 {
  String ret="";
  Mongo mongo = null;
  try {
   mongo = new Mongo(MONGODB_SERVER_IP, MONGODB_SERVER_PORT);
   DB db = mongo.getDB(MONGODB_DATABASE_NAME);
   db.slaveOk();
   DBCollection topic = db.getCollection(MONGODB_TABLE_NAME_IDS);
   BasicDBObject queryObj = new BasicDBObject();
   queryObj.put("name", "china_news");
   BasicDBObject update=new BasicDBObject("$inc", new BasicDBObject("id", 10));
   DBObject d=topic.findAndModify(queryObj,update);
   //System.out.println(d.get("id"));
   ret=d.get("id").toString();
   
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (MongoException e) {
   e.printStackTrace();
  } finally {
   mongo.close();

  }
  return ret;
  
 }

}

代碼輸出:

1
11
21
31
41
51
61
71
81
91

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.