2014-05-23 20 views
6

讓我首先說明我知道貓鼬提供的填充方法,但由於我的工作已決定移動到本地mongodb驅動程序在將來,我不能再依靠人羣來避免自己爲後者工作。什麼是最好的實踐「加入」一堆值在貓鼬/ mongodb沒有填充

如果我有文檔

People 
{_id:1, name:Austin} 
{_id:2, name:Doug} 
{_id:3, name:Nick} 
{_id:4, name:Austin} 

Hobbies: 
{Person: 1, Hobby: Cars} 
{Person:1, Hobby: Boats} 
{Person:3, Hobby: Chess} 
{Person:4, Hobby: Cars} 

我應該如何去在人與愛好結合每個文檔的兩個集合。理想情況下,我寧願只需要調用一次數據庫來獲取人員,第二次獲得業餘愛好,然後返回到客戶端應用程序對象,並將它們加入toeghter。

+0

使用ne的ID進行兩個範圍查詢來填充另一個範圍查詢,這會降低查詢計數,但會創建更多工作應用程序結束,但這就是大多數人無需填充的方式執行 – Sammaye

+0

另請注意,填充實際上是一個查詢文件 – Sammaye

回答

1

這取決於你最關心的是什麼。一般來說,我會說給愛好嵌入到人,如:

{ 
    "_id":1, 
    "name":"Austin", 
    "hobbies": [ 
    "Cars","Boats" 
    ] 
}, 
{ 
    "_id":2, 
    "name":"Doug", 
    "hobbies": [] 
}, 

{ 
    "_id":3, 
    "name":"Nick", 
    "hobbies": [ 
    "Chess" 
    ] 
}, 

{ 
    "_id":4, 
    "name":"Austin", 
    "hobbies": [ 
    "Cars" 
    ] 
} 

這將使您在使用上hobbies多鍵索引的可能性,並允許查詢像這樣:

db.daCollection.find({"hobbies":"Cars"}) 

這會將Austins作爲完整的文檔返回。是的,我知道會有很多冗餘條目。如果您想嘗試,以防止這種情況,可能是這樣的模式:

{ 
    "_id": 1, 
    "name":"Cars" 
},... 

{ 
    "_id":1, 
    "name":"Austin", 
    "hobbies": [ 
    1, ... 
    ] 
} 

這將需要對愛好的名稱字段的附加指標是有效的。所以,當你想找到每個人這是進入汽車,你就需要找到_id和查詢它像

db.person.find({"hobbies":1}) 

我認爲這是更簡單,更直觀,對於大多數使用情況更快,如果你使用嵌入。