MongoDB 组到 C# API
Posted
技术标签:
【中文标题】MongoDB 组到 C# API【英文标题】:MongoDB group to C# API 【发布时间】:2020-07-23 08:51:34 【问题描述】:我有以下 orders 的 mongoDB 集合,我需要将它们分组到 C# 应用程序中:
[
_id: 123,
status: [
Detail: 'Started',
Origin: 'France',
Last: true
]
,
_id: 456,
status: [
Detail: 'Received',
Origin: 'France',
Last: true
,
Detail: 'Started',
Origin: 'Italy',
Last: false
]
,
_id: 789,
status: [
Detail: 'Started',
Origin: 'Rome',
Last: true
]
,
_id: 123,
status: [
Detail: 'Received',
Origin: 'Germany',
Last: true
,
Detail: 'Started',
Origin: 'Spain',
Last: false
]
]
我需要从这些订单返回一个具有最后活动状态的结构,按 国家 和它们 sum 最后状态分组,类似这样:
[
France:
Total: 2,
Started: 1,
Received: 1
,
Rome:
Total: 1,
Started: 1,
Received: 0
,
Germany:
Total: 1,
Started: 0,
Received: 1
]
你能帮我创建正确的聚合来创建这个结果吗?
【问题讨论】:
【参考方案1】:您可以使用以下聚合管道实现所需的结果:
db.orders.aggregate([
$unwind: "$status"
,
$group:
_id: "$status.Origin",
Total: $sum: 1 ,
data: $push: "$$ROOT"
,
$project:
Country: "$_id",
Total: 1,
Started:
$size:
$filter:
input: "$data",
cond: $eq: ["$$this.status.Detail", "Started"]
,
Received:
$size:
$filter:
input: "$data",
cond: $eq: ["$$this.status.Detail", "Received"]
])
这里有一个easy way,用于使用具有某种类型安全性的 c# 运行此聚合。
测试:https://mongoplayground.net/p/1x0wrJlTmJl
【讨论】:
这正是我所需要的,但是即使阅读你提到的文章我也无法在 C# 中做到这一点,因为我刚刚开始使用它,你能发布一个在服务中调用的函数吗类,在c#中,为了执行这个聚合,好吗?提前致谢以上是关于MongoDB 组到 C# API的主要内容,如果未能解决你的问题,请参考以下文章