加载链接文档MongoDB Driver
本文关键字:Driver MongoDB 文档 链接 加载 | 更新日期: 2023-09-27 18:17:12
我有一个正在由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;
}
}
我的问题是加载Document2的时间太长了。我有500多条记录,我认为这是一个小数据库。每次加载耗时500ms。
是否有其他方式通过MongoDB c#驱动程序加载链接的文档?
没有漂亮的方法来连接两个集合。
在您的示例中,使用Lookup将有助于提高连接集合的速度。
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;
}
}