2015-01-15 52 views
3

我想加載初始數據到mongodb使用db.collections.insert。我有一個案例,我會插入城鎮集合,然後是郵政編碼集合。郵編收集是指城鎮收集。然而,當我寫我的劇本時,我不知道這個城鎮的_id。想知道如何在飛行中建立參考。mongodb inital負載 - 建立DBRef上飛

在例如在下面,我需要曼瑟斯特鎮的身份證以填寫「未知」的地方。

db.town.insert({name:"Manchester",state:{$ref:"state", $id:"CT"},status:"NOT-SUBSCRIBED"}); 

db.zipcode.insert({_id:"06040", town:{$ref:"town", $id:"unkown"}}); 
db.zipcode.insert({_id:"06041", town:{$ref:"town", $id:"unkown"}}); 
db.zipcode.insert({_id:"06042", town:{$ref:"town", $id:"unkown"}}); 

如果有不同的方式來加載我的初始數據而不是db.collections.insert,我也想知道這一點。

+0

可以使用批量插入或mongoimport/restore – Sammaye

+0

@Sammaye這不會解決我的問題。我仍然需要一種方法來動態查找_id。 – Srik

+0

爲什麼你不知道鎮參考?當您執行插入時,默認返回是一個包含_id字段的文檔。 – Sammaye

回答

1

您可以生成自己的ObjectId。調整你的榜樣,

var town_id = ObjectId() 
db.town.insert({ "_id" : town_id, "name" : "Manchester", "state" : { "$ref" : "state", "$id" : "CT" }, "status" : "NOT-SUBSCRIBED" }) 

db.zipcode.insert({ "_id" : "06040", "town" : { "$ref" : "town", "$id" : town_id } }) 
db.zipcode.insert({ "_id" : "06041", "town" : { "$ref" : "town", "$id" : town_id } }) 
db.zipcode.insert({ "_id" : "06042", "town" : { "$ref" : "town", "$id" : town_id } }) 

或者,因爲你似乎可以用自定義的值_idstatezipcode,可以彌補自己的獨特_id,而不是生成一個。

雖然我對你的使用案例不太瞭解,但我也必須評論說,我認爲你的參考過多。 DBRefs幾乎沒有必要。在這種情況下,您知道state將引用state集合,那麼爲什麼要將其放入state字段?只需使state字段的值爲狀態文檔的_id即可。更好的是,不要參考,只要把"state" : "CT"。我懷疑你真的需要一個單獨的state集合。只有50個州,並不像名稱會改變。

+0

你說得對。我將刪除狀態的DBref。儘管如此,我想保留州立館藏。它可以幫助我快速獲取狀態列表。 – Srik