【发布时间】:2019-02-21 04:38:18
【问题描述】:
我想要实现的是在客户端构建一个 MongoDB 聚合阶段,然后通过 URL 查询字符串将其发送到 Web API 以获取基于这些条件的结果。
我正在使用这个网址与邮递员进行调试:
http://.../monsters/aggregate?pipes={"$match":{"name":"foo"}, "$max": 2}
在我的控制器中:
[HttpGet("aggregate")]
public async Task<IActionResult> GetByAggregate([FromQuery(Name = "pipes")]string pipes)
{
if (!string.IsNullOrEmpty(pipes))
{
BsonDocument d = BsonDocument.Parse(pipes);
var p = PipelineDefinition<T, T>.Create(d);
IAsyncCursor<T> result = await _monsterService.AggregateAsync(p);
return Ok(result.ToListAsync());
}
return NotFound();
}
这不起作用,错误消息:
MongoCommandException:命令聚合失败:管道阶段规范对象必须只包含一个字段..
但是有了这个网址,我得到了我想要的:
http://.../monsters/aggregate?pipes={"$match":{"name":"foo"}}
如何将mongodb管道解析为url查询字符串的正确json格式,然后反序列化到api端的mongodb管道阶段?
有没有更好的办法,这个逻辑可行吗?
我尝试了thirdparty 的一些网址,但无法正常工作...
任何帮助将不胜感激!
【问题讨论】:
-
您能描述一下为什么它不起作用吗?
-
我刚刚更新了更多信息。谢谢
-
$max: 2 的目标是什么? -
获得 2 个对象的限制。
-
你能不能快点试试:
[{"$match":{"name":"foo"}}, {"$limit": 2}]?