MongoDB组到C#API - c#

我有以下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
                }]
    }
    ]

我需要从这些订单返回一个具有最后有效状态的结构,按国家/地区分组,它们求和最后状态,如下所示:

    [
        {
            France: {
                Total: 2,
                Started: 1,
                Received: 1
            },
            Rome: {
                Total: 1,
                Started: 1,
                Received: 0
            },
            Germany: {
                Total: 1,
                Started: 0,
                Received: 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

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…

Mongo抛出“元素名称'名称'无效”异常 - c#

我正在更新一个简单的字段。var filterDocument = new BsonDocument { { "name", "alice" } }; var newDocument = new BsonDocument { { "name", "Alice" } }; coll…

T-SQL等价的正则表达式'\ b' - c#

我正在将利用regex的CLR函数转换为SQL函数。我知道SQL Server并不完全支持正则表达式,但是我只需要一种情况就可以搜索单词。搜索字段值:{"Id":1234, "Title": "The quick brown"}.NET中的正则表达式模式:'\b' + '…

将字符串分配给numpy.zeros数组[重复] - python

This question already has answers here: Weird behaviour initializing a numpy array of string data                                                                    (4个答案)         …

您如何在列表内部调用一个字符串位置? - python

我一直在做迷宫游戏。我首先决定制作一个迷你教程。游戏开发才刚刚开始,现在我正在尝试使其向上发展。我正在尝试更改PlayerAre变量,但是它不起作用。我试过放在列表内和列表外。maze = ["o","*","*","*","*","*",…