mongodb inital load - 正在建立DBRef

时间:2015-01-15 14:47:01

标签: mongodb mongo-shell

我正在尝试使用db.collections.insert将初始数据加载到mongodb。我有一个案例,我将插入城镇集合,然后收集邮政编码。邮政编码集指的是城镇集合。但是当我写剧本时,我不知道该镇的_id。想知道如何动态构建引用。

在例如下面,我需要将Mancehster镇的名字填入“未知的地方”#34;

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,我也想知道。

1 个答案:

答案 0 :(得分: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 } })

或者,由于您似乎正在为_idstate zipcode使用自定义值,因此您可以组成自己的唯一_id,而不是生成一个。{ / p>

虽然我对你的用例知之甚少,但我还要发表评论,我认为你做的太多了。 DBRefs几乎没有必要。在这种情况下,您知道state会引用state集合,那么为什么要将其放在state字段中?只需将state字段的值设为州文档的_id即可。更好的是,根本不要引用,只需要"state" : "CT"。我怀疑你真的需要一个单独的state集合。只有50个州,而且名称不会改变。