我有一个具有多个层次结构的 MongoDB 集合,例如,我将使用一个包含国家/地区的集合,其中包含城市,每个文档都是针对特定城市的,并且包含国家/地区和城市的人口值(country_pop 和 city_pop in示例)这非常简单,我实际上有 6 个层次结构和大量数据。
[
{
"country": "France",
"city": "Paris",
"country_pop": 63000000,
"city_pop": 2200000,
"year": 2015
},
{
"country": "France",
"city": "Marseille",
"country_pop": 63000000,
"city_pop": 850726,
"year": 2015
},
{
"country": "France",
"city": "Toulouse",
"country_pop": 63000000,
"city_pop": 441802,
"year": 2015
},
{
"country": "France",
"city": "Paris",
"country_pop": 63500000,
"city_pop": 2350000,
"year": 2016
},
{
"country": "France",
"city": "Marseille",
"country_pop": 63500000,
"city_pop": 880726,
"year": 2016
},
{
"country": "France",
"city": "Toulouse",
"country_pop": 63500000,
"city_pop": 445802,
"year": 2016
}
]
我目前正在使用 doctrine mongo odm 将我的文档混合到 Php 对象中,但这不是必需的。 我想要实现的是获取我的 php 脚本值以显示类似的内容:
目前,我得到了匹配 {"country": "France"} 的所有文档,所以在这个例子中我将得到 6 个条目。但实际上,有大量数据,获得 6 个条目有点不好,我只能得到两个,一个是 2015 年,一个是 2016 年(因为 country_pop 的值在所有匹配的条目中都是相同的 {"year": "2016", "country": "France"}
在我的测试期间,我的 php 脚本使用类似 100mo 的东西来生成我多年来的值(value)观的时间表,这是 Not Acceptable 。我同意我的文档结构不是很好,但我无法控制它。
有什么解决方案可以做类似 选择 country_pop ... groupBy("country", "year") 以获得所需的最少结果?
我在 doctrine mongodb odm 文档中找到组查询:http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html#group-queries但没有真正的解释。
还有“组”方法的 mongo 文档 https://docs.mongodb.com/v3.2/reference/method/db.collection.group/似乎被用来做一些聚合,比如求和或计数,这不是我要找的。
最佳答案
初学者试试这个,如果您需要任何其他数据,请告诉我:
db.collectionName.aggregate([
{
$group: {
"_id": {
"Country": "$country",
"Year": "$year",
"CountryPop": "$country_pop"
}
}
}
])
这将按国家、年份和国家人口对您的结果进行分组,并为您的数据集生成以下结果:
{ "_id" : { "Country" : "France", "Year" : 2016, "CountryPop" : 63500000 } }
{ "_id" : { "Country" : "France", "Year" : 2015, "CountryPop" : 63000000 } }
关于Mongodb 用 groupby 之类的东西限制结果数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40531267/
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我正在使用ruby1.8.7。p=lambda{return10;}deflab(block)puts'before'putsblock.callputs'after'endlabp以上代码输出为before10after我将相同的代码重构到这里deflab(&block)puts'before'putsblock.callputs'after'endlab{return10;}现在我收到LocalJumpError:意外返回。对我来说,这两个代码都在做同样的事情。是的,在第一种情况下我传递了一个过程,在第二种情况下我传递了一个block。但是&block将该block转换为pro
因此,在使用Sphinx时,搜索限制为1000个结果。但是,如果will_paginate生成的结果分页链接超过1000个,请不要考虑这一点,并提供指向超过1000/per_page的页面的链接。设置最大页数或类似内容的明显方法是什么?干杯。 最佳答案 我认为最好将参数:total_entries提交给方法paginate:@posts=Post.paginate(:page=>params[:page],:per_page=>30,:total_entries=>1000)will_paginate将仅为显示1000个结果所需的页
当我写下面的代码时:x=[1,2,3]x我得到这个输出:[1,2,3,[...]][1,2,3,[...]][1,2,3,[...]]我不应该只得到[1,2,3,[1,2,3]]吗?解释是什么? 最佳答案 这没什么奇怪的。数组的第四个元素就是数组本身,所以当你求第四个元素时,你得到的是数组,当你求第四个元素的第四个元素时,你得到的是数组,当你求第四个元素时,你得到的是数组。第四个元素的第四个元素的第四个元素的元素......你得到了数组。就这么简单。唯一有点不寻常的是Array#to_s检测到这样的递归,而不是进入无限循环,而是返回
假设我有一个名为very_long_string的字符串,我想将其内容发送到标准输出。但是由于字符串很长,我想使用less在终端上显示文本。当我使用`less#{very_long_string}`我收到Filenotfound错误消息,如果我使用:`less我收到意外重定向错误消息。那么,如何在Ruby内部使用less呢? 最佳答案 您可以打开一个管道并通过其标准输入将您的字符串提供给less。IO.popen("less","w"){|f|f.putsvery_long_string}(假设very_long_string是保存
我在Ruby中有一个哈希:hash=Hash.new里面有一些键值对,比如说:hash[1]="One"hash[2]="Two"如果散列包含键2,那么我想将“Bananas”添加到它的值中。如果散列没有键2,我想创建一个新的键值对2=>"Bananas"。我知道我可以通过首先使用has_key?检查散列是否具有key2来做到这一点,然后采取相应的行动。但这需要一个if语句和不止一行。那么是否有一种简单、优雅的单行代码可以实现这一目标? 最佳答案 这个有效:hash[2]=(hash[2]||'')+'Bananas'如果您希望所有
在ruby1.9中,放宽了行结束位置的条件,因此我们现在可以用句号开始一行来显示方法调用。当我们混淆了链式和非链式方法,并希望显示下一个非链式方法的开始位置时,这很方便。如果没有这个新功能,我们能做的最好的可能就是使用缩进:method1(args1).method2(args2).method3(args3)method4(args4).method5(args5).method6(args6)或插入一个空行。但这很不方便,因为我们必须注意缩进,同时,不要忘记在每个方法调用之后加上链中最后一个方法调用之后的句点。正因为如此,我制造了很多错误,要么有一个额外的周期,要么有一个缺失的
我的googlefu很烂,找不到这方面的信息。基本上我想要一个实例变量,它只在类/模块的范围内可见,但也是不可变的。我是Ruby的新手,如果这个问题没有多大意义,我深表歉意。 最佳答案 classMyClassdefinitializeclass自然地,您会希望尽可能使用方法foo来读取值。一个更简单的等价物是classMyClassdefinitializedeffoo;1;endendend 关于ruby-Ruby中有常量实例变量这样的东西吗?,我们在StackOverflow上找到
在ruby中,begin#...rescue#...end不会捕获不是StandardError子类的异常。在C中,rb_rescue(x,Qnil,y,Qnil);VALUEx(void){/*...*/returnQnil;}VALUEy(void){/*...*/returnQnil;}会做同样的事情。我如何从rubyC扩展中rescueException=>e(而不仅仅是rescue=>e)? 最佳答案 Ruby需要更多文档。我不得不进入ruby源代码,这是我发现的:VALUErb_rescue(VALUE(*b_p
操作系统:CentOS6.2x86_64很抱歉缩进太古怪了。这是我的第一篇SO帖子,我是新来设置服务器的。不过,我正在学习,并将详细说明我尝试解决此问题所采取的步骤以及寻求帮助的地方。我是一位有抱负的年轻Web开发人员,并且我在其他人配置的服务器上工作,因此,这对我来说是全新的。我正在准备我最近购买的用于运行Rails应用程序的linode。我遵循了此处http://blog.blenderbox.com/2011/01/07/installing-rvm-ruby-rails-passenger-nginx-on-centos/提供的初始安装指南,并更改了步骤:sudobash反射(