2016-07-07 88 views
0

我試圖將數據從Parse遷移到一個使用Mongo作爲數據庫的新項目(沒有Parse/Parse Server)。由於這兩個項目的模式不同,我正在手動編寫一個遷移腳本來實現此目的。將Parse objectId轉換爲Mongo ObjectId?

據我所知,Parse似乎使用10個字符長的ID作爲其對象(數字,小寫字母和大寫字母的組合),而Mongo使用24個字符長的ID(12字節以十六進制表示)。

現在,在將文檔的數據從舊項目遷移到新項目時,我使用的函數將Parse ID轉換爲唯一的Mongo ObjectId(它將每個字符轉換爲2位十六進制值,然後用4個零填充20個字符的字符串)。

這是一個很好的方法嗎?我避免使用Mongo的自動ObjectId生成,以防我需要重新遷移任何舊的Parse文檔並在新數據庫中查找匹配的文檔。我知道在Mongo中自動生成的ObjectIds也嵌入了一些其他信息,比如創建日期,但我不認爲這很重要,我可以使用我自定義的ObjectId生成器?不過,我不確定對性能的影響/如果我只是以錯誤的方式進行這種遷移。

回答

1

我推薦的方法是讓Mongo自動生成ID,然後將Parse的ID存儲在名爲parseID的新字段中,以備將來參考。

例如:

 
PARSE DATA: 

    "_id": ObjectId(1234567890), 
    "title": "Mongo Migrate", 
    "description": "Migrating from Parse to Mongo" 



MONGO DATA: 

    "_id": ObjectId(1ad83e4k2ab8e0daa8ebde7), //mongo generated 
    "parseId":ObjectId(1234567890), 
    "title": "Mongo Migrate", 
    "description": "Migrating from Parse to Mongo" 

然後,如果你以後需要匹配兩個數據庫之間的文檔,你可以寫一個腳本,沿着Parse.find({「_ ID」的行雲:蒙戈。 parseId}).....

0

MongoDB默認使用_id作爲主鍵。 _id必須是唯一的以避免碰撞。你生成唯一的ObjectId到_id的方式很好。只要它們是獨一無二的,您甚至可以減少20個字符的鍵盤以節省空間。