.net - 获取参考 MongoDB 驱动程序 2.7.0
问题描述
由于内存限制,我被迫将传感器中的数据点从阵列中删除到单个文档中。我决定MongoDBRef
在我的代码中使用 Objects 将这些集合“加入”在一起。我可以创建这些MongoDBRef
对象并将其写入数据库,我也可以检索它们。
但我现在想使用该函数来遵循这里描述的参考。然而MongoDatabase
,这是一个遗留类并且在这一点上已经过时,并且新接口IMongoDatabase
没有实现该功能。我在这里看了一下,答案中的那个功能也不再存在了。我是否必须自己从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; }
}
推荐阅读
- c++ - 以跨平台方式将图像源路径从 C++ 发送到 QML
- docker - Cron 作业杀死所有悬挂的 docker 容器
- view - 我可以在 h2 SCRPT 命令中影响转储/导出顺序吗
- c# - 使用 EF Core 从 PostgreSQL 中查询字节值的长度
- swift - 我如何使用@designable 在情节提要上看到这个设计
- c# - Polly RetryAsync 不工作且代码未记录
- mysql - 子查询中的 mysql sql_mode=only_full_group_by 不起作用
- c# - 导出到excel中的日期格式问题
- java - 过滤可选值的最小值
- haskell - 在 Haskell 中调用一个函数 N 次