我喜欢在C#的datagridview中显示mongodb文档的所有嵌入式子文档。我想不应该这么难,但到目前为止找不到任何类似的问题和有用的答案。 我使用下面的docs.mongodb.com示例:
{
_id: "joe",
name: "Joe Bookreader",
addresses: [
{
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
},
{
street: "1 Some Other Street",
city: "Boston",
state: "MA",
zip: "12345"
}
]
}
不幸的是,它无法找到文档,然后逐步执行子文档数组,如:
var doc = Builders<BsonDocument>.Filter.Eq("_id", "joe");
foreach (var a in doc.addresses)
{
dataGridView1.Rows[0].Cells[0].Value = a["street"].ToString();
...
}
尝试仅包含子文档不会将我带到子文档级别:
var result = await collection.Find(new BsonDocument("_id", "joe")).Project(Builders<BsonDocument>.Projection.Include("addresses").Exclude("_id")).ToListAsync();
有什么建议吗?
答案 0 :(得分:0)
发现结果应该被视为嵌套数组。 所以循环遍历元素能够:
while (result[0]["addresses"][i]["_id"] != null)
{
DataRow dr = dtprops.NewRow();
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
try { dr[col.DataPropertyName] = result[0]["addresses"][i][col.DataPropertyName]; }
catch { };
}
dtprops.Rows.Add(dr);
i++;
};
dataGridView1.DataSource = dtprops;
我不喜欢try catch部分,但还没有发现如何避免不存在的文档字段。但这是一个不同的问题。