我正在尝试使用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,我也想知道。
答案 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 } })
或者,由于您似乎正在为_id
和state
zipcode
使用自定义值,因此您可以组成自己的唯一_id
,而不是生成一个。{ / p>
虽然我对你的用例知之甚少,但我还要发表评论,我认为你做的太多了。 DBRefs几乎没有必要。在这种情况下,您知道state
会引用state
集合,那么为什么要将其放在state
字段中?只需将state
字段的值设为州文档的_id
即可。更好的是,根本不要引用,只需要"state" : "CT"
。我怀疑你真的需要一个单独的state
集合。只有50个州,而且名称不会改变。