【问题标题】:How to sum the value of a key across all documents in a MongoDB collection with C#如何使用 C# 对 MongoDB 集合中所有文档的键值求和
【发布时间】:2020-11-29 20:56:59
【问题描述】:

我知道这个问题已经存在

https://stackoverflow.com/questions/4621300/how-to-sum-the-value-of-a-key-across-all-documents-in-a-mongodb-collection

但在那个线程中没有 c# 答案代码,所以我想重新问同样的问题

这是我在 mongodb 中的收藏

[{
  "_id": {
    "$oid": "5f310a3e644ddd24c86c961f"
  },
  "user_no": "USR-123123",
  "user_name": "Andrew Franklyn",
  "balance": 500000,
  "domicile": "Bali"
},{
  "_id": {
    "$oid": "5f310a9c9a71032c605176ba"
  },
  "user_no": "USR-9931021",
  "user_name": "Franklyn CJ",
  "balance": 304040,
  "domicile": "Bali"
},{
  "_id": {
    "$oid": "5f310abe9a71032c605176bb"
  },
  "user_no": "USR-42294",
  "user_name": "Jonathan Joestar",
  "balance": 123000,
  "domicile": "New York"
}]

我想将所有关键余额值相加并将其放入一个变量中,但我不知道该怎么做

请帮忙

【问题讨论】:

    标签: c# mongodb count


    【解决方案1】:

    因此,为简单起见,让我们将一些精简的文档放入我们将使用的 MongoDB 集合中。

    > db.test.insertMany([{
       "balance": 500000,
     },{
       "balance": 304040,
     },{
       "balance": 123000,
     }]
     )
    

    与您分享的其他 StackOverflow 帖子一样,我们需要按阶段运行聚合管道。

    var client = new MongoClient();
    
    var db = client.GetDatabase("test");
    var collection = db.GetCollection<Data>("test");
    
    var result = await collection.Aggregate()
        .Group(data => "",
            grouping => new
            {
                Sum = grouping.Sum(y => y.Balance)
            })
        .ToListAsync();
    
    var sum = result.FirstOrDefault()?.Sum ?? 0;
    
    // Sum: 927040
    Console.WriteLine($"Sum: {sum}");
    
    

    它们只会是聚合管道返回的一项或一项,这样我们可以使用一些 Linq 来获取文档,如果集合中没有任何内容,则默认为 0。

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 2018-06-06
      • 2014-04-02
      • 2022-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多