首页 > 解决方案 > 获取参考 MongoDB 驱动程序 2.7.0

问题描述

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

标签: .netmongodbjoinmongodb-.net-driver

解决方案


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

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

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; }    
}

推荐阅读