2012-06-08 73 views
1

我有一個Student集合和一個Person集合。 人員包含以下字段:姓名,地址等 學生包含:rollno和一個存儲此人的person._id的人員字段是否有可能在流星中創建一個自定義的mongodb遊標?

現在我想在學生模板中顯示學生的姓名,但註釋在Student中沒有name字段,我需要從該學生的Person文檔中獲取該字段。

有沒有辦法讓客戶端上的mongodb光標具有學生信息以及該學生的人員文檔中的選擇性字段?

此外,有沒有更好或更標準的方法來實現我想要實現的目標?

注:我不希望使用冗餘度和name場存儲在文件的學生,所以這不是一個解決方案

+0

爲什麼你有兩個單獨的集合? –

+0

這有點像繼承,一個人可以是學生,老師,或兩者兼而有之。因此,學生/教師特定字段位於其各自的集合中,而通用的每個人的詳細信息(如姓名,地址,聯繫人詳細信息都在Person集合中)。 這有意義嗎? –

+0

是的,但不適用於模式設計。爲什麼不讓學生文件具有非學生不具備的額外領域?爲什麼要單獨收藏? –

回答

2

有我想要實現的更好或更標準的方法到 的實現?

聽起來好像你正試圖在一次閱讀中讀取關於學生的所有信息 - 唯一的方法就是將所有信息都放在一個文檔中。

靈活的文檔數據庫模式允許您將文檔放在一個集合中,這些文檔不需要具有相同的模式,也可以有多個字段。

所以我建議你考慮爲什麼你實際上需要單獨的人和學生集合 - 這會導致當你添加一個學生時寫入兩個集合(而一個單獨的寫入是原子的,兩個寫入不是),它也是導致您現在遇到的問題,您需要有兩個單獨的讀取來獲取有關學生的所有信息。

這個SO question與你的情況有些相關。

0

我會更改您的代碼以在Person對象中具有角色/作業屬性。 至少對我而言,它是語義的,並且思考用原來的方法改變工作的人相對於簡單地改變角色的困難程度。

然後,你可以只搜索

Persons.find {role: 'student'} 

而這也只是與具有Student對象完全類似。如Asya所說,學生們可以擁有其他領域所擁有的額外領域。

相關問題