草庐IT

MongoDB 聚合 $match 和 $group 与 $sum

coder 2023-11-06 原文

我有一个这样的文件集:

{
    "Company" : "4433",
    "Descripcion" : "trabajo",
    "Referencia" : "11817",
    "HoraImportado" : "15:54",
    "ImportedOd" : "2014-05-20T13:54:28.493Z",
    "Items" : [],
    "Notes" : [ 
        {
            "_id" : ObjectId("537b5ea4c61b1d1743f43420"),
            "NoteDateTime" : "2014-05-20T13:54:44.418Z",
            "Description" : "nota",
            "IsForTechnician" : true,
            "Username" : "admin"
        }, 
        {
            "_id" : ObjectId("537c4a549e956f77ab8c7c38"),
            "NoteDateTime" : ISODate("2014-05-21T06:40:20.299Z"),
            "Description" : "ok",
            "IsForTechnician" : true,
            "Username" : "admin"
        }
    ],
    "OrderState" : "Review",
    "SiniestroDe" : "Emergencia",
    "Technicians" : [ 
        {
            "TechnicianId" : ObjectId("53465f9d519c94680327965d"),
            "Name" : "Administrator",
            "AssignedOn" : ISODate("2014-05-20T13:54:44.373Z"),
            "RemovedOn" : null
        }
    ],
    "TechniciansHistory" : [ 
        {
            "TechnicianId" : ObjectId("53465f9d519c94680327965d"),
            "Name" : "Administrator",
            "AssignedOn" : ISODate("2014-05-20T13:54:44.373Z"),
            "RemovedOn" : null
        }, 
        {
            "Name" : "Nuevo",
            "AssignedOn" : ISODate("2014-05-20T13:54:44.373Z"),
            "RemovedOn" : null,
            "TechnicianId" : ObjectId("5383577a994be8b9a9e3f01e")
        }
    ],
    "Telefonos" : "615554006",
    "_id" : ObjectId("537b5ea4c61b1d1743f4341f"),
    "works" : [ 
        {
            "code" : "A001",
            "name" : "Cambiar bombilla",
            "orderId" : "537b5ea4c61b1d1743f4341f",
            "price" : "11",
            "ID" : 33,
            "lazyLoaded" : true,
            "status" : 0,
            "Date" : ISODate("2014-05-21T06:40:20.299Z"),
            "TechnicianId" : "53465f9d519c94680327965d",
            "_id" : ObjectId("537c4a549e956f77ab8c7c39")
        }, 
        {
            "code" : "A001",
            "name" : "Cambiar bombilla",
            "orderId" : "537b5ea4c61b1d1743f4341f",
            "price" : "11",
            "ID" : 34,
            "lazyLoaded" : true,
            "status" : 0,
            "Date" : ISODate("2014-05-21T06:40:20.299Z"),
            "TechnicianId" : "53465f9d519c94680327965d",
            "_id" : ObjectId("537c4a549e956f77ab8c7c3a")
        }
    ]
}

现在我想获取选定的 TechnicianId 数组的作品,按 TechnicianId 分组并获取每个技术人员的作品的总和。价格。+

我试试这个:

db.orders.aggregate([
                     { $match: { 'works.TechnicianId': {$in:['53465f9d519c94680327965d']}}},
                     { $group: { _id: "$works.TechnicianId",total:{$sum:'$works.price'}}},
                   ])

这是结果:

{
    "result" : [ 
        {
            "_id" : [ 
                "53465f9d519c94680327965d", 
                "53465f9d519c94680327965d"
            ],
            "total" : 0
        }
    ],
    "ok" : 1
}

总数是 $sum 但它是 0 但应该是 44。

最佳答案

尝试添加放松,

db.orders.aggregate([
                 { $match: { 'works.TechnicianId': {$in:['53465f9d519c94680327965d']}}},
                 { $unwind: "$works" },
                 { $group: { _id: "$works.TechnicianId",total:{$sum:'$works.price'}}},
               ])

查看此处了解更多信息:http://docs.mongodb.org/manual/reference/operator/aggregation/unwind/

关于MongoDB 聚合 $match 和 $group 与 $sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23885106/

有关MongoDB 聚合 $match 和 $group 与 $sum的更多相关文章

  1. ruby-on-rails - rails group by 和 order by column - 2

    在我的Controller中,我得到了按类别分组的所有Extras:defindex@categories=Extra.all.group_by(&:category)end结果类似于哈希数组:{#=>[#,#=>[#,#]}我想按类别“排序”列而不是id排序,它应该如下所示:{#=>[#,#=>[#,#]}当我尝试时:defindex@categories=Extra.all.group_by(&:category).sort_by{|s|s[:sort]}end我得到“没有将符号隐式转换为整数”。那是因为我在“sort_by”中使用了一个符号吗? 最佳答

  2. ruby - Rails Elasticsearch 聚合 - 2

    不知何故,我似乎无法获得包含我的聚合的响应...使用curl它按预期工作:HBZUMB01$curl-XPOST"http://localhost:9200/contents/_search"-d'{"size":0,"aggs":{"sport_count":{"value_count":{"field":"dwid"}}}}'我收到回复:{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":90,"max_score":0.0,"hits":[]},"a

  3. c# - Ruby 等效于 C# Linq 聚合方法 - 2

    什么是Linq聚合方法的ruby​​等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj

  4. ruby - 为什么 `Symbol#match` 的行为与 `String#match` 和 `Regexp#match` 不同? - 2

    String#match和Regexp#match在匹配成功时返回一个MatchData:"".match(//)#=>#//.match("")#=>#//.match(:"")#=>#但是Symbol#match返回匹配位置(如String#=~)::"".match(//)#=>0为什么Symbol#match表现不同?有用例吗? 最佳答案 我将其报告为Ruby核心中的错误:https://bugs.ruby-lang.org/issues/11991.让我们看看他们会怎么说。更新被质疑的行为似乎是一个错误。似乎从Ruby2.

  5. ruby , `match' : invalid byte sequence in UTF-8 - 2

    我对UTF-8编码有一些问题。我在这里阅读了一些帖子,但它仍然无法正常工作。这是我的代码:#!/bin/envruby#encoding:utf-8defdeterminefile=File.open("/home/lala.txt")file.eachdo|line|puts(line)type=line.match(/DOG/)puts('aaaaa')iftype!=nilputs(type[0])breakendendend这是我文件的前3行:;?lalalalal60000065535-1362490443-0000006334-0000018467-0000000041en

  6. ruby - 如何将 Thor::Group 注册为带参数的子命令 - 2

    这道题开始于here.但随着我对雷神的了解越来越多,情况发生了很大变化。我正在尝试创建一个带参数的Thor::Group子命令。奇怪的是,如果没有参数,它就可以工作。我可以使用Thor::Group作为子命令吗?这在我输入时有效:foocounterfoo/bin/foomoduleFooclassCLI但是当我输入时这不起作用:foocounter5moduleFooclassCLI','Countupfromtheinput.')endclassCounter:numeric,:desc=>"Thenumbertostartcounting"desc"Prints2numbersb

  7. ruby-on-rails - Ruby float 学 - Sum Calc 中的精度问题 - 2

    大家早上好我在float学方面遇到了一些问题,完全迷失在“.to_f”、“*100”和“.0”中!我希望有人能帮助我解决我的具体问题,并准确解释他们的解决方案为何有效,以便我下次理解这一点。我的程序需要做两件事:对一组小数求和,确定它们的和是否正好为1.0确定1.0与数字总和之间的差值-将变量的值设置为使总和等于1.0的精确差值。例如:[0.28,0.55,0.17]->总和应为1.0,但我一直得到1.xxxxxx。我正在以下列方式实现总和:sum=array.inject(0.0){|sum,x|sum+(x*100)}/100我需要此功能的原因是我正在读取一组来自excel的小数。

  8. ruby - 从 Ruby 中的排序数组创建嵌套哈希——递归 group_by - 2

    我有一个对象数组,这些对象已根据这些对象的几个属性进行了排序。按照优先顺序,这些属性是foo、bar和baz。这意味着对象首先按foo排序;然后具有相同foo值的子序列按bar排序;然后具有相同foo和bar值的那些按baz排序。我想将其转换为反射(reflect)该分组的嵌套哈希。基本上我正在寻找递归Enumerable#group_by。键是foo、bar和baz的值;这些值将是对象的子哈希或数组。这是一个例子:[obj1,obj2,...objn].group_by_recursive(:foo,:bar,:baz)#=>{foo_val_1=>{bar_val_1=>{baz_

  9. ruby-on-rails - Rails group_by 是否已弃用? - 2

    我有一个要分组的数组,“group_by”函数似乎适合我的情况。http://apidock.com/rails/Enumerable/group_by我在Rails3.2.13中使用它。grouped_array=my_array.group_by(&:my_function)#Assumerun'my_function'haveresult1onelement1,element3andresult2onelement2,element4,then:#grouped_array={#result1=>[element1,element3],#result2=>[element2,el

  10. sql - Rails 3 Sum 两个领域的产品 - 2

    我需要计算我的Rails3应用中两个字段的乘积之和(即相当于Excel的sumproduct函数)。Rails中是否有一种方法可以帮助解决这个问题?如果没有,那么使用自定义sql的Rails代码是什么?例如,酒店有很多房间。房间具有sqft(平方英尺)、数量(该尺寸)和hotel_id的属性。我想计算给定酒店中所有房间的总平方英尺。在SQL中,对于Hotel.id=8,我相信以下语句会起作用:selectsum(rooms.sqft*rooms.quantity)asSumSqftfromroomsinnerjoinhotelsonrooms.hotel_id=hotels.idwhe

随机推荐