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的主要内容,如果未能解决你的问题,请参考以下文章

类型元组到实例元组

休眠位数组到实体映射

python元组到dict

javascript 输入组到json

我怎样才能从一个位数组到一个字节? [复制]

将写入操作映射到 Dataframe 行组到不同的增量表