2012-05-09 73 views
-2

我使用的是官方的Mongodb C#驅動程序。它允許我們構建一個嵌套的文檔結構。現在,查詢這些文檔是一件繁瑣的工作,因爲它需要一個完全合格的點符號來精確地引用相關文檔。爲此,我想檢索所有父級文檔密鑰,以便我可以選擇其中一個並附加到字符串並傳遞給.Query。我能夠遞歸地獲得所有外鍵,但我不知道如何獲得外鍵的名稱比輸入的鍵小一級。 這我使用來獲取所有按鍵的代碼如下:深入瞭解mongo db中的嵌套文檔結構

void Print(BsonDocument document) 
     { 

      foreach (var element in document) 
      { 
       bool a = element.Value.IsBsonDocument; 
       if (element.Value.IsBsonDocument) 
       { 
        Console.WriteLine(element.Name); 
        Print(element.Value.AsBsonDocument); 
        Console.WriteLine("\n"); 
       } 

      } 

該文件是主文件,其中我得到FindOneById(Id)的方法

+0

Himani,你好像在這裏的問題到目前爲止運氣不好。特別是對於這一個,你可能想提供一個簡短的例子,說明文檔結構的外觀,你想要選擇什麼,以及你想要結果是什麼。到目前爲止,這段代碼對上下文沒有幫助。 「爲此,我想要檢索所有父級文檔密鑰,以便我可以選擇其中一個並附加到字符串並傳遞給.Query」對於不知道您的結構和上下文的任何人都很模糊。 – jdi

回答

1

爲了確保我明白了,你的問題是如何找到子對象的關鍵名稱?

在內部if語句中,調用element.Value.AsBsonDocument應該返回一個BSON文檔。然後,您應該可以按照迭代外部文檔字段的方式遍歷該文檔中的字段。你的結果代碼可能看起來像這樣:

void Print(BsonDocument document) 
{ 
    foreach (var element in document) 
    { 
     if (element.Value.IsBsonDocument) 
     { 
      BsonDocument subdoc = element.Value.AsBsonDocument; 
      foreach (var subelement in subdoc) 
      { 
       // Code to print the subdocument here 
      } 
     } 

    } 
} 
+0

聽起來好像OP希望匹配子文檔的父鍵,這意味着查詢只返回一個子文檔而不是整個文檔。我不熟悉C#驅動程序,所以我不知道返回的是什麼。 – jdi

+0

@jdi:謝謝。我仍然困惑,因爲在哪裏調用打印方法。這是一個遞歸函數。 –