2015-01-15 1 views
3

Я пытаюсь загрузить исходные данные в mongodb с помощью db.collections.insert. У меня есть случай, когда я буду вставлять коллекцию города, а затем собирать zipcode. Коллекция zipcode относится к городской коллекции. Однако, когда я пишу свой сценарий, я не знаю города. Хотелось бы знать, как создать ссылку «на лету».mongodb inital load - здание DBRef на лету

В частности, ниже, мне нужен идентификационный номер города Манчестер, который будет заселен на месте «unkown».

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 } }) 

В качестве альтернативы, так как вы, кажется, использует собственные значения для _id для state и zipcode, вы можете сделать свой собственный уникальный _id вместо создания одного.

Хотя я мало знаю о вашем случае использования, я также должен прокомментировать, что, я думаю, вы слишком много ссылаетесь. DBRefs практически не нужны. В этом случае вы знаете, что state будет ссылаться на коллекцию state, так зачем ставить ее в поле state? Просто сделайте значение поля state_id государственного документа. Еще лучше, не ссылайтесь вообще и просто положите "state" : "CT". Я сомневаюсь, что вам действительно нужна отдельная коллекция state. Есть только 50 штатов, и это не похоже на то, что имена будут меняться.

+0

Вы правы. Я удалю DBref для состояния. Однако я хотел бы сохранить государственную коллекцию. Это помогает мне быстро получить список штатов. – Srik