Получить ссылку на драйвер MongoDB 2.7.0 - PullRequest
0 голосов
/ 03 июля 2019

Из-за ограничений памяти я был вынужден удалить точки данных из моих датчиков из массива в отдельные документы. Я решил использовать MongoDBRef объекты в моем коде, чтобы "объединить" коллекции обратно вместе. Я могу просто создавать и записывать эти MongoDBRef объекты в базу данных, а также получать их.
Но теперь я хочу использовать функцию для перехода по ссылке, как описано здесь . Однако MongoDatabase является устаревшим классом и на данный момент устарел, и новый интерфейс IMongoDatabase не реализует эту функцию. Я посмотрел здесь , и эта функция в ответе также больше не существует. Нужно ли самому создавать дополнительный запрос из данных объекта MongoDBRef или я что-то здесь упускаю?

1 Ответ

1 голос
/ 03 июля 2019

Вы правы, вам придется создать дополнительный запрос самостоятельно.

Чтобы сделать это, создайте метод расширения, подобный этому

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

или Async edition.

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