2012-07-02 59 views
1

一些關於mongoose中的mongo ObjectId的問題Mongoose.js:是否可以更改ObjectId的名稱?

1)可以通過命名而不是_id來獲得ObjectId字段嗎?以及如何做到這一點?當我在我的代碼做:

MySchema = new mongoose.Schema({ 
    id : mongoose.Schema.ObjectId 
}); 

它改變不了什麼。

2)如果我有ObjectID字段名爲_id是有可能從請求返回另一個名稱此字段(例如只是「ID」 - 發送它在網絡中的響應);

3)和公正的理解的問題:爲什麼是的ObjectId _id領域通過「ID」屬性不是「_id」訪問?

謝謝,亞歷克斯

+0

看到這個問題的一個方面,你問: http://stackoverflow.com/q/10363513/1259510 – JohnnyHK

+0

謝謝,但似乎虛擬屬性does'n解決問題,當我使用.find方法ID不會返回vitruals,應該嗎?我相信「所有者:mongoose.Schema.ObjectId」 - 是爲了關係。 _id不能改變。你我感興趣的是有可能使用貓鼬在查詢結果中用id替換id。 – WHITECOLOR

+0

是的,虛擬屬性確實出現在從'.find'返回的模型實例上;這是他們背後的全部想法。每個MongoDB文檔都必須具有'_id'屬性,但ObjectId屬性也可以用於其他內容 - 通常作爲對另一個集合中文檔的引用。 – JohnnyHK

回答

2

的「_id」元素是MongoDB的架構,保證一個集合中的每個文件都可以被唯一標識的一部分。如果您使用分片在不同機器中允許唯一標識符,這一點尤其重要。因此,這是一個設計選擇,所以沒有辦法讓乘坐的吧:)

產生如下的_id的默認值:

  • 時間戳
  • 哈希機器主機名的
  • 生成進程的PID
  • 增量

,但你可以使用任何價值,你想,只要是獨一無二的。

如果它是更容易爲你想的一些東西,有在那裏的_id,但你真的不關心:)只是讓系統自動生成,並使用自己的標識。

所以,如果你還是想創建自己的「身份證」執行類似的東西:

db.mySchema.ensureIndex({"id": 1}, {"unique" : true}) 

但要確保是真正獨一無二的,它不與您使用的API衝突。

2)將其重命名上的應用程序側,只是將其發送作爲Web響應之前。

3)我想這是因爲你使用的API。也許作者發現它更合乎邏輯地返回id而不是_id?老實說,從來沒有試過貓鼬:)

+0

非常感謝回覆。 – WHITECOLOR

相關問題