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
的自定义值用于 state
和 zipcode
,您可以创建自己的唯一 _id
而不是生成一个.
虽然我对你的用例了解不多,但我也不得不说我认为你做的引用太多了。 DBRef 几乎从不需要。在这种情况下,您知道 state
将引用 state
集合,那么为什么要把它放在 state
字段中呢?只需将 state
字段的值设为状态文档的 _id
即可。更好的是,根本不引用而只输入 "state" : "CT"
。我怀疑您是否真的需要一个单独的 state
集合。只有 50 个州,而且名称不会改变。
我正在尝试使用 db.collections.insert 将初始数据加载到 mongodb。我有一个案例,我将插入城镇集合,然后插入邮政编码集合。邮政编码集合是指城镇集合。但是,当我编写脚本时,我不知道城镇的 _id。想知道如何即时构建参考。
例如下面,我需要在 "unkown".
的位置填充 Mancehster 镇的 IDdb.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
的自定义值用于 state
和 zipcode
,您可以创建自己的唯一 _id
而不是生成一个.
虽然我对你的用例了解不多,但我也不得不说我认为你做的引用太多了。 DBRef 几乎从不需要。在这种情况下,您知道 state
将引用 state
集合,那么为什么要把它放在 state
字段中呢?只需将 state
字段的值设为状态文档的 _id
即可。更好的是,根本不引用而只输入 "state" : "CT"
。我怀疑您是否真的需要一个单独的 state
集合。只有 50 个州,而且名称不会改变。