我正在尝试编写一个聚合来计算有多少文档具有某些字段(即只计算它们是否存在)。对象看起来像这样:
{
"_id" : ObjectId("5617731fe65e0b19101c7039"),
"dateCreated" : ISODate("2015-10-09T07:56:15.068Z"),
"dateSent" : ISODate("2015-10-09T07:56:16.682Z"),
"dateAttempted" : ISODate("2015-10-09T07:56:16.682Z")
},
{
"_id" : ObjectId("561e37bb537d381bb0ef0ae2"),
"dateCreated" : ISODate("2015-10-14T11:08:43.306Z"),
"dateSent" : ISODate("2015-10-14T11:09:51.618Z"),
"dateAttempted" : ISODate("2015-10-14T11:09:51.618Z"),
"dateViewed" : ISODate("2015-10-15T10:09:50.618Z"),
"dateOpened" : ISODate("2015-10-15T10:10:01.618Z")
}
我想遍历所有文档,计算该字段存在的位置。期望的输出:
{
"total" : 1000,
"created" : 1000,
"sent" : 990,
"attempted" : 995
"viewed" : 800,
"opened" : 750
}
如果每天可以将此输出分组,则可加分!我不希望对范围内的每个日期执行新的聚合。
这是我目前所拥有的,但没有用;它为每个字段返回零
[
{
"$group": {
"_id": {
"$dayOfMonth": "$dateCreated"
},
"total": {
"$sum": 1
},
"sent": {
"$sum": "$dateSent"
},
"attempted": {
"$sum": "$dateAttempted"
},
"viewed": {
"$sum": "$dateViewed"
},
"clicked": {
"$sum": "$dateClicked"
}
}
}
]
最佳答案
$cond和 $ifNull运算符是这里的 helper :
[
{
"$group": {
"_id": {
"$dayOfMonth": "$dateCreated"
},
"total": {
"$sum": 1
},
"sent": {
"$sum": { "$cond": [ { "$ifNull": [ "$dateSent", false ] }, 1, 0 ] }
},
"attempted": {
"$sum": { "$cond": [ { "$ifNull": [ "$dateAttempted", false ] }, 1, 0 ] }
},
"viewed": {
"$sum": { "$cond": [ { "$ifNull": [ "$dateViewed", false ] }, 1, 0 ] }
},
"clicked": {
"$sum": { "$cond": [ { "$ifNull": [ "$dateClicked", false ] }, 1, 0 ] }
}
}
}
]
$ifNull 将返回存在的字段(逻辑 true)或替代值 false。 $cond 查看此条件并返回 1 where true 或 0 where false 以提供条件数数。
关于mongodb - 当前字段的聚合条件计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33143156/
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot
我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']
如何找到调用此方法的位置?defto_xml(options={})binding.pryoptions=options.to_hifoptions&&options.respond_to?(:to_h)serializable_hash(options).to_xml(options)end 最佳答案 键入caller。这将返回当前调用堆栈。文档:Kernel#caller.例子[0]%rspecspec10/16|===================================================62=====
我的Gallery模型中有以下查询:media_items.includes(:photo,:video).rank(:position_in_gallery)我的图库模型有_许多媒体项,每个都有一个照片或视频关联。到目前为止,一切正常。它返回所有media_items包括它们的photo或video关联,由media_item的position_in_gallery属性排序。但是我现在需要将此查询返回的照片限制为仅具有is_processing属性的照片,即nil。是否可以进行相同的查询,但条件是返回的照片等同于:.where(photo:'photo.is_processingIS