2011-11-25 49 views
1

鑑於這種文檔格式課程的集合,我想從嵌入式陣列挑 單個參與者對象如何使用官方C#驅動程序從嵌入式數組中選取單個元素。最佳實踐?

{ 
    _id: someCourseId, 
    CourseName: "someName", 
    Participants[ 
     {UserId: X Name: "person1"}, 
     {UserId:Y, Name:"person2"}, 
     {UserID:Z, Name:"person3"} 
    ] 
} 

我怎樣寫與官方的C#尖銳的驅動程序,只 返回嵌入式陣列查詢帶有用戶ID Y的元素?

現在,我可以選擇具有與IDŸ 一個參與者使用Query.EQ課程(「Participants.UserId」,Y),我可以選擇只得到 使用 SetFields課程對象的參與者場( 「參與者」),但是如果這個數組很大,我不想 獲取整個數組,但只有一個元素。這可能嗎?

如果沒有,那麼我認爲最好的做法是在需要提取特定元素的情況下不使用嵌入式 數組。 而應該使用單獨的集合來保存數組值 和「根文檔的外鍵」(就像您在RDBMS中所做的那樣)。 也就是說,在我的例子中,我將創建一個參與者集合,其中 每個文檔包含課程的標識。你同意嗎?

回答

1

您可以使用slice這樣的:

// it will skip 0 elements and load only one element from nested array 
var slice = Fields.Slice("Participants", 0, 1); 

而且,我猜你應該知道的MongoDB總是返回根文件,但你可以通過你想要嵌套數組的負荷和尺寸指定的字段改變這個文件的內容。

0

對於當前版本的MongoDB,這是不可能的。就像你說的那樣,你必須把它分成兩個參考集合。由於嵌入式數組的其他限制,例如無法在查詢中對它們進行排序,我之前不得不這樣做。

相關問題