jjzjj

mongodb - 在 mongoid/mongodb 中分组

coder 2023-11-06 原文

Unit has_many StationInstances

StationInstance belongs_to unit

我想在 mongoid 中按 unit_id 对站实例进行分组。

获取按 unit_id 分组的所有站点实例的查询是什么?

最佳答案

您可以直接使用 group 执行此操作mongo 中的(内部是一个 map reduce)方法,就像您在 sql 中所做的那样。代码是

  db.StationInstance.group({key:{unit_id:true},
                            cond:{},
                            reduce:function(a,b){b.sum++;},
                            initial:{sum:0}});

这将只返回计数

>> [ { "unit_id" : xxxx, "sum" : 1 }, { "unit_id" : zzzzz, "sum" : 2 } ]

但是您不能随它获取 StationInstance 项目

相反,您可以使用 MongoDB 执行此操作 map-reduce .. 检查下面的代码

map = function() { 
    emit(this.unit_id,{count:1,StationInstance:this._id}); 
}

在 map 函数中,您可以按 StationInstance 的 unit_id 进行分组(因为它属于单元,它将具有 unit_id),并按计数聚合。由于普通计数不返回整个对象,我们显式返回 StationInstance

的 ID(或仅通过 this 的任何字段或整个对象)
reduce = function(k, values) {
    var result = {count: 0, StationInstance: []};
    values.forEach(function(value) {
        result.count += value.count;
        result.StationInstance.push(value.StationInstance);
    });
    return result;
}

在 reduce 中,我们计算分组的项目,并将 StationInstances 放入数组中

终于发布了

 db.StationInstance.mapReduce(map,reduce,{out: { inline : 1}})

会返回想要的结果

mongoid 中执行此操作,只是 stringfiy 函数 map & reduce 并像使用它一样

StationInstance.collection.mapreduce(map,reduce,{:out => {:inline => 1},:raw=>true })

关于mongodb - 在 mongoid/mongodb 中分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8699165/

有关mongodb - 在 mongoid/mongodb 中分组的更多相关文章

  1. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  2. ruby-on-rails - 在 rails 中分配/替换参数哈希 - 2

    我在RailsController操作中有下面的代码序列。在IF之前,params包含请求参数,正如预期的那样。在它之后,params为零。谁能解释一下这里发生了什么?iffalseparams={:user=>{:name=>"user",:comment=>'comment'}}end谢谢。 最佳答案 params其中包含请求参数实际上是一个方法调用,它返回包含参数的散列。你的params=行正在分配给一个名为params的局部变量.iffalse之后block,Ruby已经看到了本地params变量,所以当你引用params时

  3. ruby-on-rails - rspec Mongoid 范围适用于开发而不是测试 - 2

    我有一个适用于Rails中的Mongoid对象的作用域,它在开发时效果很好,但在运行测试时效果不佳。它实际上在测试中根本不起作用。这是一个嵌入式文档。父级:classPersonincludeMongoid::Documentdefself.with_appointmentswhere(:appointments.not=>{'$size'=>0})endembeds_many:appointments,store_as:'Appointments',class_name:'Appointment'end嵌入的child:classAppointmentincludeMongoid::

  4. ruby - Mongoid 3 中 Rails 模型的强一致性 - 2

    我希望特定模型的所有数据库交互都通过集群中的mongo主节点,因此我将模型设置为使用强一致性。classPhotoincludeMongoid::Documentwithconsistency::strongfield:number,type:Integer#let'ssayaphotonumberisuniqueinthedbvalidate:unique_numberend但这似乎不起作用,因为当我保存两张非常靠近的照片时,我仍然遇到验证错误。photo1#dbhasnumber=1forthisobjectphoto1.update_attributes(number:2)pho

  5. ruby-on-rails - Ruby On Rails Mongoid 分组依据 - 2

    对于按日期分组,我使用了group_by方法。Example:Product.all.group_by{|d|d.created_at}#returnHash但是kaminari不支持Hash。我使用Mongoid,我需要通过页面导航(kaminari)按日期分组。怎么做到的? 最佳答案 Kaminari只支持数组分页例如Kaminari.paginate_array(an_array).page(1).per(10)group_by不是mongoid方法,它是Array的方法,它是对内存中的所有数据进行分组。为了使用mongoid

  6. ruby-on-rails - Rails/Mongoid 与 Struct 的关系问题 - 2

    我正在构建这个图书馆应用程序,它有3个类。国家、图书馆和书籍。国家有许多图书馆,图书馆属于一个国家。图书馆有很多书,书是嵌入图书馆的。但是,当我执行此auto_pick_job时,我们到达top_free_book并调用library.state。由于某种原因,library.state为nil。我希望恢复状态但没有骰子。我调用和创建库的方式如下。所以图书馆将永远属于一个现有的国家。state=Stats.find(x)library=state.libaries.new(info)library.save_optimistic!我也很感激使用Struct的关系帮助。classStat

  7. ruby-on-rails - 在 Rails 中分配和重用变量 - 设计模式 - 2

    我一直在使用相同的模式来返回json代码(参见下面的示例)。我正在收集照片并将其存储在变量中。如果存在标记参数,我将获得一个更具体的集合并将其重新分配给同一个变量。然后将其作为json返回。什么是更好的设计模式来实现同样的事情?photos=collection_of_photosifparams[:tag]photos=photos.find_all{|photo|somecondition}endrenderjson:photos 最佳答案 如果照片是ActiveRecord对象,您应该使用scope为您需要的确切数据生成适当的

  8. ruby-on-rails - rails mongoid 清晰的标准 - 2

    Mongoid::Paranoia向生成标准的模型添加默认范围#{"$exists"=>false}},options:{},class:Line,embedded:false>我可以使用生成的Model.deleted找到已删除的文档,#{"$exists"=>true}},options:{},class:Line,embedded:false>我如何覆盖它以便我可以搜索已删除和未删除的文档。PSModel.unscoped不起作用 最佳答案 试试这个(它是一种hack):classUserincludeMongoid::Doc

  9. ruby - 无法在 Ruby 中分配内存(无 MemoryError)? - 2

    我写了一个简单的脚本,它应该读取整个目录,然后通过去除HTML标签将HTML数据解析为普通脚本,然后将其写入一个文件。我有8GB内存和大量可用虚拟内存。当我这样做时,我有超过5GB的RAM可用。目录中最大的文件为3.8GB。脚本是file_count=1File.open("allscraped.txt",'w')do|out1|forfile_nameinDir["allParts/*.dat"]doputs"#{file_name}#:#{file_count}"file_count+=1File.open(file_name,"r")do|file|source=""tmp_sr

  10. ruby-on-rails - ruby + Mongoid : how to make a required field? - 2

    我使用Mongoid的githead版本(因为Rails4),我想制作一个字段必填文档:classMyClassincludeMongoid::Documentfield:name,type:String,required:true我有这个错误:Problem:Invalidoption:requiredprovidedforfield:name.Summary:Mongoidrequiresthatyouonlyprovidevalidoptionsoneachfielddefinitioninordertopreventun...我做错了什么? 最佳答案

随机推荐