2012-01-24 24 views
3

有沒有辦法更改MongoDB集合參考? 隨着變化我的意思是參考中的值。 我不能僅僅創建一個直接鏈接,因爲數據庫正在使用中。 我的結構看起來像這樣MongoDB更改DBrefs

{ 
     "_id" : ObjectId("4e7c6b47e4b0dea06288ad21"), 
     "license" : "ABC123", 
     "model" : "911", 
     "make" : "Porsche", 
     "owner" : { 
       "$ref" : "users", 
       "$id" : "Test User" 
     } 
} 

我想改變ID喜歡當然

{ "$ref" : "users", "$id" : "NEW USER"} 

回答

3

你可以,但你不能直接$組做到這一點:

> db.test.save({a:{$ref:"users", $id:"Test User"}}) 
> db.test.find() 
{ "_id" : ObjectId("4f1e85489d086ee4511551b6"), "a" : DBRef("users", "Test User") } 
> db.test.update({}, {$set:{'a.$id':"NEW USER"}}) 
> db.test.find() 
{ "_id" : ObjectId("4f1e85489d086ee4511551b6"), "a" : { "$id" : "NEW USER", "$ref" : "users" } } 

正如你所看到的,這會打破引用,因爲DBRef規範要求首先將$ ref和$ id字段的順序作爲$ ref。

您可以更新它是這樣的:

> db.test.update({}, {$set:{a:{$ref:"users", $id:"NEW USER"}}}) 
> db.test.find() 
{ "_id" : ObjectId("4f1e858b9d086ee4511551b7"), "a" : DBRef("users", "NEW USER") } 

或者只是使用 「新DBREF(..)」 如果你在殼是。

0

個人而言,我已經開始完全避免DBRef,因爲它增加了很多不必要的開銷,因爲在我的情況下,「user」字段引用的所有對象都在同一個集合中,使得DBRef的第一部分還原。

所以我會遷移到一個新的領域(比如說「ownerId」),並直接將ObjectId存儲在那裏。很明顯,您可能需要手動檢索用戶對象,但這取決於您的應用程序框架。