2015-05-27 4 views
0

У меня есть эти 2 документа:Как вставить документ с ссылочного документа в MongoDB

Contry { 
    code : integer 
    name: string 
} 

и

State { 
    code : integer 
    name: string 
    contry: DBRef to Contry 
} 

Я делаю это, чтобы вставить Contry и государство в том, что страна (с использованием оболочки монго):

// insert a new country 
db.country.insert({ code : 1, name: 'Brasil' }); 

// find the country by code 
var brasilId = db.country.find({ code : { $eq: 1} }).toArray()[0]._id; 

// create a DBRef object for that country 
var brasilRef = { $ref: 'country', $id: brasilId }; 

// insert the state referencing the country 
db.state.insert({ code : 1, state: 'SC', country: brasilRef }); 

Это правильно?

Есть лучший способ сделать это?

ответ

0

решаемые с помощью:

var countryId = Object(); 
db.country.insert({ _id: countryId, code: 1, name: 'Brasil' }); 
db.state.insert({ code: 1, name: 'SC', contry : { $ref: 'country', $id: countryId } }); 
1

От the doc:

MongoDB приложения используют один из двух методов, касающихся документов:

  • Manual references где вы сохраните _id поле одного документа в другой документ в качестве ссылки. Затем ваше приложение может запустить второй запрос для возврата связанных данных. Эти ссылки являются простыми и достаточными для большинства случаев использования.

  • DBRefs - ссылки с одного документа на другой, используя значение поля _id первого документа, имя коллекции и, при необходимости, его имя базы данных. Включая эти имена, DBRefs позволяют документам, расположенным в нескольких коллекциях, более легко связываться с документами из одной коллекции.

Здесь, как ваш код страны всегда будет относиться к записям в country коллекции, не нужно в DBRef. Кроме того, если я принимаю code быть уникальный ключ (это это факт вашей _id?), Вы могли бы просто использовать:

db.country.insert({ code : 1, name: 'Brasil' }); 
db.state.insert({ code : 1, state: 'SC', country: 1 }); 
//            ^
//         a reference to country with code 1 

При этом, в зависимости от вашего варианта использования, с помощью надлежащего ObjectId может быть лучшей идеей:

oid = ObjectId() 
db.country.insert({ _id: oid, code : 1, name: 'Brasil' }); 
db.state.insert({ code : 1, state: 'SC', country: oid }); 
+0

используя этот 'подъязычная = ObjectId() db.country.insert ({_id: oid, code: 1, name: 'Brasil'}); db.state.insert ({code: 1, state: 'SC', страна: {$ ref: 'страна', $ id: oid}}); '. Можете ли вы добавить это к своему ответу? –

+0

@BetoNeto Не стесняйтесь публиковать сообщения _own_ answer - вы можете даже принять его! Таким образом, у будущих посетителей будет выбор между различными вариантами, и они смогут выразить свое мнение путем голосования вверх или вниз. –

Смежные вопросы