【发布时间】:2018-01-16 11:10:16
【问题描述】:
我有以下问题:我正在尝试学习如何将 MongoDb 与 c# 一起使用。我能够在集合中插入项目,但我无法过滤现有集合以检索一个或多个满足查询条件的项目。这是我的班级结构:
public class TransactionRequest
{
public Header Header { get; set; }
public Transaction Transaction { get; set; }
}
public class Header
{
public string BusinessId { get; set; }
}
public class Transaction
{
public string Id { get; set; }
public string Status { get; set; }
}
这是我保存对象的方式:
public async Task<TransactionResponse> SaveAsync(TransactionRequest request)
{
var document = new BsonDocument
{
{"Request", BsonValue.Create(JsonConvert.SerializeObject(request))}
};
await this._mongoClient.GetDatabase("MyDatabase").GetCollection<BsonDocument>("Transactions").InsertOneAsync(document, null, CancellationToken.None);
return new TransactionResponse
{
InternalId = document["_id"].ToString(),
TransactionId = request.Transaction.Id
};
}
并且对象被正确保存,如下图所示:
但是如何检索包含 id 为 1234 的对象事务的文档呢?
我正在使用 .net core 2 和 MongoDb c# 驱动程序版本 2.5。
编辑:该集合是一个 BsonDocument 集合,它不是 Transactionrequest 类型的集合,那么如何将字段 id 映射到该 bson 文档? 编辑 2:这是我尝试检索文档的方式:
public async Task<string> RetrieveResponse(string id)
{
var cursor =await this.mongoClient.GetDatabase("MyDatabase")
.GetCollection<TransactionRequest>("Transactions")
.FindAsync(t => t.Transaction.Id.Equals("1234"));
while (await cursor.MoveNextAsync())
{
IEnumerable<TransactionRequest> documents = cursor.Current;
Console.WriteLine(documents.Count()); //this is empty
}
return string.Empty;
}
但是在while循环里面,检索到的集合是空的
【问题讨论】:
-
我已经看过那里的代码,但是如何将字段 id 从事务对象映射到我在集合中拥有的 BsonDocument?
标签: c# mongodb mongodb-query