我有以下问题:我正在学习如何使用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 Core2和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循环中,检索到的集合为空
您当前的保存方式在文档的顶层创建了一个“请求”字段,这并不反映在您的实体结构中。为了解决这个问题,您不应该自己执行JSON转换,而是让驱动程序为您执行:
public async Task<TransactionResponse> SaveAsync(TransactionRequest request)
{
await this._mongoClient.GetDatabase("MyDatabase")
.GetCollection<TransactionRequest>("Transactions")
.InsertOneAsync(request, null, CancellationToken.None);
// load document - not needed, just for illustration purposes
this._mongoClient.GetDatabase("MyDatabase")
.GetCollection<TransactionRequest>("Transactions")
.Find(t => t.Transaction.Id == request.Transaction.Id);
return new TransactionResponse
{
InternalId = request.Id,
TransactionId = request.Transaction.Id
};
}
那么你的检索也应该起作用了。
我需要筛选此查询,以便不显示值为的文档。当前,我的代码显示以下结果: 我需要一些过滤器,使消失,以便它显示我作为第一个值:。 我以前执行过以下操作:
基本上,我希望使用过滤泛型(扩展集合),然后返回相同泛型集合实现的实例(最好是新实例),例如实现方法签名。 null null null 修改原始列表
这种情况非常简单,如ADFv2文档和示例中所述,我已经创建了一个复制管道来从MongoDB集合中获取数据,并将其写入AzureSQL数据库。 已成功传输完整采集数据,并且所有映射都已正确设置。当我试图过滤源数据集以仅从MongoDB获取最后n天时,问题就开始了。我尝试了几个查询,并与MongoDB Compass进行了交叉检查,以确定它们是否真的在执行Mongo-side,事实就是这样。归结起来就
本文向大家介绍C ++中的按位筛选,包括了C ++中的按位筛选的使用技巧和注意事项,需要的朋友参考一下 在这个问题中,给我们一个数字N。我们的任务是使用按位筛选找到所有小于N的素数。 按位筛是Eratosthenes筛的优化版本,用于查找所有小于给定数的素数。 让我们举个例子来了解这个问题, 输入-N = 25 输出-2 3 5 7 11 13 17 19 23 按位筛子的工作方式与普通筛子相同。
我有如下数据: 我希望在聚合中进行过滤(因为上面的数据来自前几个阶段),以便过滤一个数组,只显示一个数组项,其中用户等于_id。 以下返回空一个数组,如何让过滤器填充一个数组,因为我期望? 其中: 将“$\u id”替换为“$$un”。“用户”显示所有数据。其中一项与预期的一样,因此问题似乎出现在$eq语句中。 如何让过滤器显示一个数组,因为我期望?
我想使用mongodb聚合匹配操作,通过字符串中多个嵌套对象的对象Id筛选mongodb集合。但是,在匹配操作中,spring data mongodb不会将字符串值转换为对象Id。 当Spring data mongodb将字符串值转换为oid时,我能够通过字符串值中的多个文档Id(主键,而不是嵌套对象的对象Id)过滤文档,没有任何问题: 我想要达到的目标如下: 但我总是得到以下信息: Spri