2016-11-09 80 views
1

我有一個正在由MongoDB驅動程序加載的文檔。加載鏈接的文檔MongoDB驅動程序

問題是這個文件有另一個鏈接的文件由ObjectId

由於我的應用程序,我需要的頭文件滿載,我通過一個IEnumerable加載鏈接的文檔如下:

IMongoDatabase Database { get; set; } 

public class Document1 { 
    [BsonId] 
    public ObjectId Id; 
    public ObjectId Document2Id; 

    [BsonIgnore] 
    public Document2 Document2; 
} 

public class Document2 { 
    [BsonId] 
    public ObjectId Id; 
    public string Foo; 
    public string Bar; 
} 

public IEnumerable<Document1> List() { 
    var 1documents = Database.GetCollection<Document1>("1documents"); 
    var 2documents = Database.GetCollection<Document2>("2documents"); 

    foreach(var document in 1documents.AsEnumerable()) { 
     document.Document2 = 2documents 
           .AsEnumerable() 
           .FirstOrDefault(d => d.ID == document.Document2Id); 
     yield return document; 
    } 
} 

我的問題是,文檔2的負荷的時間過長。我有500多條記錄,我認爲它是一個小型數據庫。每個負載需要500毫秒。

是否有任何其他方式通過MongoDB C#驅動程序加載鏈接的文件?

回答

1

沒有美麗的方式來加入兩個集合。
在你的情況下使用查找將有助於提高加入收藏的速度。

public IEnumerable<Document1> List() 
{ 
    var document1Collection = Database.GetCollection<Document1>("Document1"); 
    var document2Collection = Database.GetCollection<Document2>("Document2"); 

    var document2Lookup = document2Collection.AsQueryable().ToLookup(x => x.Id); 
    foreach (var document1 in document1Collection.AsQueryable()) 
    { 
     document1.Document2 = document2Lookup[document1.Document2Id].FirstOrDefault(); 
     yield return document1; 
    } 
}