2016-12-09 2 views
0

에 나열하는 방법 mongodb 문서의 모든 포함 된 하위 문서를 C#의 datagridview에 표시하고 싶습니다. 그렇게 어렵지 않아야한다고 생각했지만 지금까지는 비슷한 질문이나 유용한 대답을 찾을 수 없었습니다.mongodb 문서의 모든 하위 문서를 C#

{ 
    _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(); 
    ... 
} 

가 하위 문서를 포함하려고 나는 아래 docs.mongodb.com의 예제를 사용 하위 문서 수준으로 만 이동하지 않습니다.

var result = await collection.Find(new BsonDocument("_id", "joe")).Project(Builders<BsonDocument>.Projection.Include("addresses").Exclude("_id")).ToListAsync(); 

제안 사항이 있으십니까?

+0

Datagridview는 표 - 행 - 열 구조 기반 그리드입니다. 문서 구조를 행 및 열로 병합하는 방법을 찾아야합니다. –

+0

나를 괴롭히는 datagridview가 아니라 foreach 문입니다. 임베디드 배열 요소를 하나씩 단계별로 실행하는 방법을 모르겠습니다. – Jaap

답변

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; 

: 그래서 요소를 통해 반복하는 것은 함께 할 수 있었다. 그러나 그것은 다른 문제입니다.

관련 문제