gpt4 book ai didi

c# - 加载链接文档 MongoDB 驱动程序

转载 作者:可可西里 更新时间:2023-11-01 10:19:30 25 4
gpt4 key购买 nike

我有一个正在由 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 多条记录,我认为这是一个小型数据库。每个负载需要 500 毫秒。

有没有其他方法可以通过 MongoDB C# Driver 加载链接文档?

最佳答案

加入两个集合并没有什么绝妙的方法。
在您的情况下,使用 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;
}
}

关于c# - 加载链接文档 MongoDB 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40510785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com