mongodb 初始加载 - 即时构建 DBRef

mongodb inital load - building DBRef on the fly

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

例如下面,我需要在 "unkown".

的位置填充 Mancehster 镇的 ID
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,我也想知道。

您可以生成自己的 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 的自定义值用于 statezipcode,您可以创建自己的唯一 _id 而不是生成一个.

虽然我对你的用例了解不多,但我也不得不说我认为你做的引用太多了。 DBRef 几乎从不需要。在这种情况下,您知道 state 将引用 state 集合,那么为什么要把它放在 state 字段中呢?只需将 state 字段的值设为状态文档的 _id 即可。更好的是,根本不引用而只输入 "state" : "CT"。我怀疑您是否真的需要一个单独的 state 集合。只有 50 个州,而且名称不会改变。