我是MongoDB和MongoDB C#驱动程序的新手。
为了使代码更具可读性(并且可靠),我决定尝试使用强类型对象。因此我创建了一个POCO ......
数据库中最初只存在Id和Payload。
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中找到任何答案。
答案 0 :(得分:1)
首先要做的事情: - )
var result = await collection.FindAsync<MongoDbRepositoryItem>(filter);
var data = result.ToList();
在这一行中我们期待cursor
而不是单个项目。
使用data
,我们将光标转换为列表以供以后处理;
如果我们只获得第一项,那么我们可以使用
MongoDbRepositoryItem result = collection.Find<MongoDbRepositoryItem>(filter).First();
修改
var b2 = new FilterDefinitionBuilder<MongoDbRepositoryItem>();
var f2 = b2 . Exists(x => x.ProcessingStatus, false);
var result2 = await collection.FindAsync<MongoDbRepositoryItem>(f2);
欢迎任何评论!