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。我的过滤器显然是强类型的。我在文档中找不到任何答案

MongoDB强类型过滤器和Find()

第一件事:-)

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

欢迎任何评论!