MongoDB强类型过滤器和Find()

时间:2016-07-04 10:43:46

标签: c# mongodb mongodb-csharp-2.0

我是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中找到任何答案。

1 个答案:

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

欢迎任何评论!