2012-06-17 81 views
3

我創建了一個'序列'集合。它有'名字'和'櫃檯'字段。 'name'字段被設置爲'Tag'並且'counter'字段被設置爲0.以下是返回'counter'字段的下一個值的方法內的代碼。創建/更新序列 - MongoDB

​​

但是,這段代碼不起作用。任何投入?

我在這裏發現了一個這樣的實現,http://dev.bubblemix.net/blog/2011/04/auto-increment-for-mongodb-with-the-java-driver/,但是,我想知道這段代碼有什麼問題。

+0

可以增加mongod的服務器上的日誌級別(例如mongod的-vvv),並檢查什麼實際上正在此代碼發送到服務器執行? – jyemin

+0

我執行了您鏈接到的純java驅動程序代碼,並在運行mongod -v的日誌中看到此代碼: Wed Jun 20 19:41:33 [conn3] run command test。$ cmd {findandmodify:「seq」,query :{_id:「seq1」},更新:{$ inc:{seq:1}},new:true,upsert:true} Wed Jun 20 19:41:33 [conn3] query test.seq query:{_id :「seq1」} ntoreturn:1 idhack:1 reslen:48 0ms Wed Jun 20 19:41:33 [conn3] update test.seq query:{_id:「seq1」} update:{$ inc:{seq:1 }} idhack:1 0ms – jyemin

+0

我從這些日誌中不完全明白究竟發生了什麼。 – devang

回答

4

只要您首次在MongoDB中保存了具有「標記」名稱的序列對象,您的代碼就能正常工作。我建議你使用@Id註釋標註name字段。例:

public class Sequence { 
    @Id 
    protected final String name; 
    protected Long counter; 

    public Sequence(String name, Long counter) { 
     this.name = name; 
     this.counter = counter; 
    } 
    public String getName() { 
     return name; 
    } 
    public Long getCounter() { 
     return counter; 
    } 
    public void setCounter(Long counter) { 
     this.counter = counter; 
    } 

} 

保存在MongoDB中的對象:

template.save(new Sequence("Tag",0L))