2014-01-09 24 views
0

所以不知何故,MongoDB不支持縮放目的的自動增量。沒有自動增量的MongoDB/NoSQL關係?

我的問題是什麼然後我用約束?

我應該使用Object-id作爲查找某些內容的約束嗎?這會不會很慢? (這是一個12-BYTE字段!)

我應該使用唯一鍵作爲'主鍵'嗎?例如Books.find('actual-author-name')?這會更快嗎?

基本上,這樣做的一般/被接受的方式是什麼?

+0

除非你有非常少的數據(在這種情況下,我不知道爲什麼你使用的MongoDB),那麼12個字節不會是「慢」 – Sammaye

回答

1

如果您已經有合適的密鑰,請使用它作爲_id字段以獲得集合之間的關聯。你也可以依靠12字節的字段,因爲它不是那麼多。還請檢查是否使用嵌入式文檔更容易,以避免必須將所有鏈接連接在一起 - 這通常是像MongoDB這樣的文檔數據庫中的首選解決方案。

0

自動增量點通常用於自動生成保證唯一的鍵值。

MongoDB ObjectID可以滿足這個角色,不僅僅是獨特的集合,甚至是全球獨一無二的。它們也按升序排列,因爲它們以當前時間戳開始。

它們不保證是連續的,但SQL數據庫中的自動增量列也不是,因爲當您刪除記錄時,該ID將不會被重用。

請注意,MongoDB的_id字段不一定需要是ObjectID。您也可以分配任何其他數據。所以當你的數據集已經有唯一的標識符時,你可以在插入文檔之前手動填充_id來使用這些標識符。 _id字段甚至不必是原始值。它甚至可以成爲一個對象。所以,你可以擁有多領域的主鍵是這樣的:

_id: { first_name = "John", last_name = "Smith" }