2016-07-04 5 views
0

Я довольно новичок в MongoDB и в драйвере MongoDB C#.MongoDB сильно типизировал фильтр и Find()

Чтобы сделать код более читаемым (и надежным), я решил попробовать сильно типизированные объекты. Поэтому я создал POCO ...

Только идентификатор и полезная нагрузка первоначально присутствуют в базе данных.

internal class MongoDbRepositoryItem 
{ 
    [BsonId] 
    public string Id { get; set; } 

    [BsonElement("rawdata")] 
    public byte[] Payload { get; set; } 
    public string ProcessingStatus { get; set; } 
    public DateTime ProcessingStarted { get; set; } 
    public int ProcessingAttempts { get; set; } 
} 

Теперь необходимо выполнить несколько операций.
Прежде всего, мне нужно получить самый старый необработанный элемент.

Я думал о чем-то вроде этого:

var builder = Builders<MongoDbRepositoryItem>.Filter; 

// I didn't read about sorting yet. I also need the "oldest" document. 
var filter = builder.Exists(item => item.ProcessingStatus, false); 

MongoDbRepositoryItem result = await _collection.FindAsync<MongoDbRepositoryItem>(filter); 

Но это не компилируется.FindAsync() ожидает BsonDocument. Очевидно, что мой фильтр сильно типизирован. Я не нашел ответа в documentation.

ответ

1

Первое первым :-)

var result = await collection.FindAsync<MongoDbRepositoryItem>(filter); 
var data = result.ToList(); 

в этой линии мы ожидаем cursor, а не один элемент. Используя data, мы конвертируем наш курсор в список для последующей обработки;

Если мы хотим получить только первый элемент, то мы могли бы использовать

MongoDbRepositoryItem result = collection.Find<MongoDbRepositoryItem>(filter).First(); 

EDIT

var b2 = new FilterDefinitionBuilder<MongoDbRepositoryItem>(); 
var f2 = b2 . Exists(x => x.ProcessingStatus, false); 
var result2 = await collection.FindAsync<MongoDbRepositoryItem>(f2); 

Любые комментарии приветствуются!

+0

Ошибка: «Невозможно преобразовать из FilterDefinition в FilterDefinition ". Спасибо за подсказку First(), позже я буду использовать FindOneAndUpdate(). – lapsus

+0

какая версия драйвера вы используете - я неспособен воспроизвести .... – profesor79

+0

mongodriver = latest (2.2.4) – lapsus