2015-01-02 146 views
2

我想從我的文檔中使用c#連接器獲取子元素。從文檔中獲取子元素

我的文件看起來是這樣的:

// sample document 
{ 
    "_id": 
    { 
     "$oid":"myid" 
    }, 
    "Somedata":"This is a test", 
    "object1": 
    { 
     "name":"myname", 
     "object2": 
     { 
     "Text":"Hello World!" 
     } 
    } 
} 

我有一個類映射到這一點,看起來像下面這樣:

[BsonIgnoreExtraElements] 
public class MyDataClass 
{ 
    [BsonId] 
    public ObjectId Id { get; set; } 
    [BsonElement("object1.object2.Text")] 
    public string Text; 
    [BsonElement("Somedata")] 
    public string Data; 
} 

當查詢運行時,ID和數據變量被填充,但Text變量不是。我的猜測是,這是因爲它在一個對象內部,但我不確定我出錯的地方。

+0

我相信您的_id格式錯誤,您確定_id是否爲{0}:「myid」 } – Disposer

+0

當mongodb返回文檔時,它會返回整個文檔。沒有像SQL那樣的列名特定選擇。所以你需要遍歷Object1來獲取文本字段。我相信mongodb驅動程序不會爲你做這件事 – qamar

+0

與論壇網站不同,我們不使用「謝謝」或「任何幫助表示讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed - 從 - 個)。 –

回答

2

BsonElement接受字段的名稱,例如「FIELD1」的根級別的參數名稱,並且你不能傳遞一個嵌套名稱(使用點符號命名如「field1.nested_field」)。你必須確定你的子文件

public class MyDataClass 
{ 
    public ObjectId _id { get; set; } 
    public string Somedata { get; set; } 
    public Object1 object1 { get; set; } 
} 

public class Object1 
{ 
    public string name { get; set; } 
    public Object2 object2 { get; set; } 
} 

public class Object2 
{ 
    public string Text { get; set; } 
} 

一些類和如果不想定義您的子文檔新的類,你必須寫自己的蒙戈SerializerDeSerializerMyDataClass