c# - 无法从字符串反序列化管道阶段
问题描述
我在这样的字符串上有一个 mongodb 聚合管道阶段:
{ $project: {
txtStatus: { $trim: { input: '$txtStatus' } }
} },
{ $match: {$or: [{'txtStatus': {$eq: 'VALID'}},{'txtStatus': {$eq: 'NOTVALID'}}]} },
{ $group: {
_id: '$txtStatus',
Count: { $sum: 1 }
} }
我目前需要分离每个阶段并像这样一一追加:
_myRepo.SetDatabase("MyDbName")
.GetCollection("MayColl")
.Aggregate<dynamic>()
.AppendStage<dynamic>(stageProject.ToBsonDocument())
.AppendStage<dynamic>(stageMatch.ToBsonDocument())
.AppendStage<dynamic>(stageGroup.ToBsonDocument());
我需要将整个字符串传递给“AppendStage”,而不必像我今天所做的那样将它分成多个阶段,如下所示:
_myRepo.SetDatabase("MyDbName")
.GetCollection("MayColl")
.Aggregate<dynamic>()
.AppendStage<dynamic>(myEntireAggregationString.ToBsonDocument());
解决方案
我把我的查询放在括号内:
[
{ $project: {
txtStatus: { $trim: { input: '$txtStatus' } }
} },
{ $match: {$or: [{'txtStatus': {$eq: 'VALID'}},{'txtStatus': {$eq: 'NOTVALID'}}]} },
{ $group: {
_id: '$txtStatus',
Count: { $sum: 1 }
} }
]
然后,我将查询反序列化为 BsonDocument 数组,并在 Aggregate() 方法中传递此数组/列表:
var pipelineStages = BsonSerializer.Deserialize<BsonDocument[]>(myQuery).ToList();
var ret = _myRepo.SetDatabase("MyDbName")
.GetCollection("MayColl")
.Aggregate<dynamic>(pipelineStages)
.ToList();
推荐阅读
- css - 自定义 ojs 3.3.0 仪表板字体(无硬编码)
- python-3.x - 单个程序中的多个 udp 套接字减慢了我的程序
- pandas - 如何使用数据熊猫查找最左边的列
- android - android-如何从标记位图开始共享元素过渡?
- android - 如何更改 Android 小部件 RemoteViews 中按钮的字体/字样?
- javascript - 通过来自多个客户端的 Ajax PUT 请求发送数据
- node.js - 如何将 AWS S3 用于 npm 注册表(nodeJs AWS Lambda)
- python - 如何关闭硒中的隐私同意覆盖?
- openstreetmap - 获取奥地利的所有街道、邮政编码、位置组合
- javascript - Node.js 中的内存泄漏 - 如何分析分配树/根?