2012-06-27 19 views
0

有沒有辦法在集合中創建全局自動遞增值?MongoDb中的全局自動遞增字段

Perforce擁有changelist的概念,它可以成爲無狀態更新的強大功能。我正在考慮相同類型的功能。

例子:

create> DocA.name = "foo" => changelist = 1 
create> DocB.name = "bar" => changelist = 2 
update> DocA.name = "bob" => changelist = 3 
create> DocC.name = "joe" => changelist = 4 

結果:

DocA.changelist = 3 
DocB.changelist = 2 
DocC.changelist = 4 

然後我可以搜索的變更表後所做的任何更改:4和自信我沒有錯過任何東西。

來自mongodb大師的任何想法如何有效地做到這一點?

回答

1

MongoDB文檔包含auto-incrementing fields的列表。一般來說這是不好的做法,但這可能適用於您尋求的功能。

這表明,我也看到有人在上次更新的時間使用「時間戳」。這可能會滿足您的要求。同樣,如果這是一個非常關鍵的功能,你可能想看看Riak的MVCC,它看起來與你想要的最接近。

+0

感謝您的迴應!時間戳總是存在潛在的碰撞問題,直至微秒成爲我們的問題。但是,我想到我們可以使用輔助集合$ INC作爲追加到時間戳的計數器。這個自動遞增的字段文章看起來相當......醜陋。 – darren

+0

嗯,它幾乎聽起來像你需要某種形式的MVCC ...不知道你是如何嫁給MongoDB的,但你可能想看看Riak ......對於自動遞增的文章來說,它並不簡單因爲它不被推薦 –

+0

我明白你對Riak的意思,但我認爲它仍然沒有提供一個不斷增加的數值。通過增加「變更列表」,可以很容易地查找自上次檢查後集閤中發生了哪些變化。 vclock基於散列,出現更多更新和同步衝突解決方案。 – darren