MongoDB强类型过滤器和Find()
本文关键字:Find 强类型 过滤器 MongoDB | 更新日期: 2023-09-27 17:54:25
我是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。我的过滤器显然是强类型的。我在文档中找不到任何答案
第一件事:-)
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);
欢迎任何评论!