2015-05-27 48 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

使用這種'OID =的ObjectId() db.country.insert({_id:oid,code:1,name:'Brasil'}); db.state.insert({code:1,state:'SC',country:{$ ref:'country',$ id:oid}});'。你能把這個添加到你的答案嗎? –

+0

@BetoNeto隨時張貼你_own_答案 - 你甚至可以自己接受它!這樣,未來的訪問者可以在各種選項之間進行選擇,並能夠通過投票表決來表達意見。 –