我正在尝试构建一个管道,该管道将根据特定条件搜索文档并将对特定字段进行分组以提供所需的输出。 deals 的文档结构是
{
"_id":"123",
"status":"New",
"deal_amount":"5200",
"deal_date":"2018-03-05",
"data_source":"API",
"deal_type":"New Business",
"account_id":"A1"
},
{
"_id":"456",
"status":"New",
"deal_amount":"770",
"deal_date":"2018-02-11",
"data_source":"API",
"deal_type":"New Business",
"account_id":"A2"
},
{
"_id":"885",
"status":"Old",
"deal_amount":"4070",
"deal_date":"2017-09-22",
"data_source":"API",
"deal_type":"New Business",
"account_id":"A2"
},
帐户名称是引用字段。账户文件是这样的:
{
"_id":"A1",
"name":"Sarah",
},
{
"_id":"A2",
"name":"Amber",
},
管道应搜索“status”为“New”且“deal amount”大于 2000 且应按“account name”分组的文档。我用过的流水线是这样的
db.deal.aggregate([{
$match: {
status: New,
deal_amount: {
$gte: 2000,
}
}
}, {
$group: {
_id: "$account_name",
}
},{
$lookup:{
from:"accounts",
localField:"account_id",
foreignField:"_id",
as:"acc",
}
}
])
我只想在结果中显示字段 deal_amount、deal_type、deal_date 和账户名。
预期结果:
{
"_id": "123",
"deal_amount": "5200",
"deal_date": "2018-03-05",
"deal_type": "New Business",
"account_name": "Sarah"
}, {
"_id": "885",
"deal_amount": "4070",
"deal_date": "2017-09-22",
"deal_type": "New Business",
"account_name": "Amber"
},
我是否必须在“组”阶段包含所有这些字段、交易金额、交易类型、交易日期和帐户名称,以便在结果中显示,或者是否有任何其他方法可以做到这一点。非常感谢任何帮助。
最佳答案
请使用此查询。
aggregate([{
$match: {
status: "New",
deal_amount: {
$gte: 2000,
}
}
},
{
$lookup:{
from:"accounts",
localField:"account_id",
foreignField:"_id",
as:"acc",
}
},
{
$unwind: {
path: '$acc',
preserveNullAndEmptyArrays: true,
},
},
{
$group: {
_id: "$acc._id",
deal_amount: { $first: '$deal_amount' },
deal_date: { $first: '$deal_date' },
deal_type: { $first: '$deal_type' },
}
}
])
你可以这样做:
1) 使用$$ROOT 引用:link
{ $group : {
_id : "$author",
data: { $push : "$$ROOT" }
}}
2) 通过分配单个参数
{
$group: {
_id: "$account_name",
deal_amount: { $first: '$deal_amount' },
deal_date: { $first: '$deal_date' },
.
.
}
}
关于MongoDB 聚合管道组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49132067/
我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1
不知何故,我似乎无法获得包含我的聚合的响应...使用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
什么是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
我希望我的样式表保持纯css,但我想使用嵌入式ruby来包含一些图像的动态路径:.home{background:#FFFurl()no-repeat;}如果我将样式表从.css更改为.css.erb,image_path会得到正确解释,但当我部署到生产环境时,它不会被Assets管道处理。如果我硬编码路径,无论是在生产还是开发中都会出错,因为它们以不同的方式加载Assets。我该如何解决? 最佳答案 这是有效的:将.erb添加到.css文件并使用ruby/rails代码就可以了。所以我上面的问题中的片段很好。你必须在/conf
我的Assets管道中有一个名为typefaces的文件夹。它无需向application.rb添加任何内容即可工作。在目录中,我有不同的字体类型,例如文件夹中的.eof、.ttf等AssetsTypefacesEof...filesTtf...files除非字体在Assets/字体中,否则它们不会成为Assets管道的一部分。Assets管道不会进入子目录。我如何让Assets管道超越Assets/字体,进入Assets/字体/eof、Assets/字体/ttf等? 最佳答案 在您的app/assets/javascripts/a
有谁知道Assets摘要值是怎么计算出来的?如果我有两个JS文件,其中包含各种其他包含的JS脚本,那么如果没有更改任何内部脚本,每个文件是否会保持相同的摘要哈希?还是每次运行assets:precompile操作时都会计算一个新的摘要值? 最佳答案 公认的答案并不完全正确。我们为暂存、演示和生产服务器构建静态Assets,并且在每种情况下为同一Assets赋予不同的摘要值。原来Rails环境也在考虑之列。Sprockets按如下方式创建摘要:#Sprockets::Environment::initialize@digest_cla
Logstash允许executingarbitrarycommands作为管道的输入。这是我的示例管道:input{exec{command=>'/usr/bin/ruby-e"putsRUBY_VERSION"'interval=>10}}output{stdout{codec=>rubydebug}}有了这个我得到了以下错误:/opt/logstash/vendor/bundle/jruby/1.9/gems/bundler-1.9.10/lib/bundler/resolver.rb:328:in`blockinverify_gemfile_dependencies_are_f
我在使用Arel聚契约(Contract)一查询中的2列时遇到了问题。当我运行它时,在railsdev-server崩溃之前,整个服务器会卡住一分钟。我怀疑是无限循环:)。也许我误解了Arel的整个概念,如果有人能看一下,我将不胜感激。这个查询的预期结果是这样的:[{:user_id=>1,:sum_account_charges=>300,:sum_paid_debts=>1000},...]a_account_charges=Table(:account_charges)a_paid_debts=Table(:paid_debts)a_participants=Table(:exp
我创建了一个带有供应商目录的gem,其中包含来自bootstrap-sass的样式表和javascripts并自行引导。目录结构为bootstrap-sass-gem/vendor/assets/javascripts和bootstrap-sass-gem/供应商/Assets/样式表我在测试项目中需要gem,但每当我尝试从该gem中请求某些东西时,我都会收到Sprockets::FileNotFound错误。例如,我在application.css中添加了*=requirebootstrap。bootstrap位于bootstrap-sass-gem/vendor/assets/st
我正在使用Rails3.2构建站点。我接触Rails或Ruby已经3年了,所以我对两者都生疏了,加上我最后一次使用Rails是Rails2.3。不用说,请原谅下面的任何“简单”问题。这是规范MultiTennantCMS/商店网站http://company1.mywebsite.comhttp://company2.mywebsite.com等等每个“商店”(又名子域)都可以通过CSS定制拥有自己的外观、感觉等自定义可以在应用程序的UI中执行,允许用户更改Bootstrap的基本变量(即@textColor、@bodyBackground等)我将less-rails-bootstra