Mysql

MongoDB/MySQL - 自動增量與對象 ID

  • June 21, 2015

我正在評估 MongoDB 並圍繞它編寫一些基本的 PHP 應用程序。通常在我的 PHP/MySQL 應用程序中,我會創建一個 ID 欄位並將其設置為在每行插入時自動遞增。然後,我將使用此 ID 將表關聯/連接在一起。

但是在 MongoDB 中,沒有自動增量(我相信除非您創建函式來執行此操作),只有一個 objectID。因此,我不確定如何將集合關聯在一起。

是否值得編寫一個自動增量函式(如此處所述:http: //docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/),還是儲存 ObjectID 的常見做法?

一個範例是以下 MySQL 查詢:

SELECT * FROM cars WHERE car_type = '2' 

但是在 MongoDB 中……

db.cars.find( { car_type : 507c35dd8fada716c89d0013 } );

以上是標準做法嗎?我是否通過創建自動增量欄位錯誤地使用 Mongo?

大流士

編輯:我認為我深深植根於 MySQL,以至於我無法想像沒有自動遞增 ID 的應用程序。儲存 objectID 是否安全(就像儲存 MySQL AI ID 一樣)?這是否不利於可讀性,因為您必須查找該 objectID 才能查看它與什麼相關?

在 MySQL 或幾乎任何其他 RDBMS 中,通常都有行(對象)的 ID,因此您可以在其他表中使用它來建立表之間的連結(如果您願意,可以使用關係或 PK 和 FK)。這是推薦用於大多數類型的數據庫設計的規範化過程的一部分

$$ there are exceptions though $$. 然而,在 MongoDB 中,一般的方式或設計是非規範化。即文件(行)與其所有相關對像一起儲存。

為了更清楚:

在 MySQL 中,您將有兩個表:carscar_types. 在汽車中,您只儲存該汽車類型的 ID。

在 Mongo DB 中,您將有一個名為cars 的集合,並且此集合中的文件將具有包含類型資訊的子文件。(你仍然可以有一個單獨的集合types,但你不只儲存objectID在汽車的集合中)

高溫高壓

查詢

db.cars.find( { "car_type" : 507c35dd8fada716c89d0013 } );

實際上會被使用,恕我直言是這種情況下的最佳解決方案。但是,為了使此查詢高效,您將創建一個索引

db.cars.ensureIndex({"car_type":1})

在這種情況下,連結兩個文件是有意義的。在其他關係中嵌入文件可能是更好的選擇。有關詳細資訊,請參閱有關數據建模的 MongoDB 文件以獲取詳細資訊。

引用自:https://dba.stackexchange.com/questions/82965