获取参考 MongoDB 驱动程序 2.7.0

Fetch Reference MongoDB Driver 2.7.0

由于内存限制,我被迫将传感器中的数据点从数组中删除到单个文档中。我决定在我的代码中使用 MongoDBRef 对象来 "join" 将集合重新组合在一起。我可以创建这些 MongoDBRef 对象并将其写入数据库,我也可以检索它们。
但我现在想使用该函数来遵循描述的参考 here。然而 MongoDatabase 是遗留的 class 并且在这一点上已经过时,并且新接口 IMongoDatabase 没有实现该功能。 我看了一下 here,答案中的那个函数也不再存在了。 我是否必须自己根据 MongoDBRef 对象中的数据创建一个额外的查询,或者我在这里遗漏了什么?

你是对的,你必须自己创建一个额外的查询。

一种方法是创建这样的扩展方法

public static TDocument FetchDBRefAs<TDocument>(this MongoDBRef dbRef, IMongoDatabase database)
{
     var collection = database.GetCollection<TDocument>(dbRef.CollectionName);

     var query = Builders<TDocument>.Filter.Eq("_id", dbRef.Id);
     return collection.Find(query).FirstOrDefault();
}

或异步版本

 public static async Task<TDocument> FetchDBRefAsAsync<TDocument>(this MongoDBRef dbRef, IMongoDatabase database)
 {
     var collection = database.GetCollection<TDocument>(dbRef.CollectionName);

     var query = Builders<TDocument>.Filter.Eq("_id", dbRef.Id);
     return await (await collection.FindAsync(query)).FirstOrDefaultAsync();
 }

可以这样调用

var referencedEntity = entity.ReferencedEntity.FetchDBRefAs<T>(this.database))

实体的样子

public class Entity
{
       [BsonId]
       [BsonRepresentation(BsonType.ObjectId)]
       public string Id { get; set; }
       public string RandomProperty { get; set; }
       public MongoDBRef ReferencedEntity { get; set; }    
}