2015-01-02 169 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