我很好奇是否有任何最佳实践来索引按月/日聚合的集合的指标。
文档示例:
{
track: {
2012: { # year
1: { # month
page_views: ...,
clicks: ...,
visits: ...
},
5: {
page_views: ...,
clicks: ...,
visits: ...
},
...
}
}
编辑:
因为有关于如何改进文档的讨论以及将其拆分的一些建议(我已经考虑过)。我会更新为什么要求是这样的。该文档用于跟踪用户。随着时间的推移跟踪他们的综合浏览量、访问量等。用户在文档上有其他数据。例如,有一个注册日期。目标是能够说出类似“显示在 X 日期注册并且在 A 和 B 跟踪日期之间拥有超过 Z 页面浏览量的用户”之类的话。如果没有嵌入,我无法想出一个模式来促进这一点。
更新文档示例:
{
registration_date: ...,
email: ...,
track: {
2012: { # year
1: { # month
page_views: ...,
clicks: ...,
visits: ...
},
5: {
page_views: ...,
clicks: ...,
visits: ...
},
...
}
}
最佳答案
不幸的是,您的数据库模式对索引非常不友好。当您像那样嵌套对象时,您唯一的选择是为每个可能的年/月组合创建一个索引。也很难查询。例如,当您想要按降序获得最好的三个月时,您将很难在数据库上尝试这样做。
更好的选择是将年和月都放入对象中,将对象放在一个数组中(因为索引可以用于数组查找),并在年、月和唯一字段上创建一个唯一的复合索引周围的文件。
{
name: "Some Unique Name",
tracking: [
{year: 2011, month: 11, page_views: 235, clicks: 132, visits: 87 },
{year: 2011, month: 12, page_views: 176, clicks: 122, visits: 67 },
{year: 2012, month: 1, page_views: 53, clicks: 32, visits: 17 },
{year: 2012, month: 2, page_views: 89, clicks: 72, visits: 67 },
{year: 2012, month: 3, page_views: 99, clicks: 82, visits: 72 }
]
}
ensureIndex({name:1, tracking.year:1, tracking.month:1});
当您需要频繁访问个别日期、月份或年份的累积统计信息时,您可以将这些指标存储在单独的子文档中:
tracking_daily: [
...
{year: 2012, month: 3, day: 1, ... },
{year: 2012, month: 3, day: 2, ... },
{year: 2012, month: 3, day: 3, ... },
{year: 2012, month: 3, day: 4, ... },
{year: 2012, month: 3, day: 5, ... },
{year: 2012, month: 3, day: 6, ... },
{year: 2012, month: 3, day: 7, ... },
{year: 2012, month: 3, day: 8, ... },
...
],
tracking_monthly: [
...
{year: 2011, month: 11, ... },
{year: 2011, month: 12, ... },
{year: 2012, month: 1, ... },
{year: 2012, month: 2, ... },
{year: 2012, month: 3, ... }
...
],
tracking_yearly: [
...
{year: 2011, ... },
{year: 2012, ... }
]
关于用于按月或日聚合的指标的 MongoDB 索引策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13711767/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
我发现自己需要这个。假设cart是一个包含用户列表的模型。defindex_of_itemcart.users.each_with_indexdo|u,i|ifu==current_userreturniendend获取此类关联索引的更简单方法是什么? 最佳答案 indexArray上的方法与您的index_of_item方法相同,例如cart.users.index(current_user)返回数组中第一个对象的索引==给obj。如果未找到匹配项,则返回nil。 关于ruby-on-
因此,当我遵循MichaelHartl的RubyonRails教程时,我注意到在用户表中,我们为:email属性添加了一个唯一索引,以提高find的效率方法,因此它不会逐行搜索。到目前为止,我们一直在根据情况使用find_by_email和find_by_id进行搜索。然而,我们从未为:id属性设置索引。:id是否自动索引,因为它在默认情况下是唯一的并且本质上是顺序的?或者情况并非如此,我应该为:id搜索添加索引吗? 最佳答案 大多数数据库(包括sqlite,这是RoR中的默认数据库)会自动索引主键,对于RailsMigration
我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试
假设我有一个可枚举对象enum,现在我想获取第三个项目。我知道一种通用方法是转换成数组,然后使用索引访问,如:enum.to_a[2]但这种方式会创建一个临时数组,效率可能很低。现在我使用:enum.each_with_index{|v,i|breakvifi==2}但这非常丑陋和多余。执行此操作最有效的方法是什么? 最佳答案 你可以使用take剥离前三个元素,然后剥离last从take给你的数组中获取第三个元素:third=enum.take(3).last如果您根本不想生成任何数组,那么也许:#Ifenumisn'tanEnum
Ruby初学者努力简单地将这个@@people散列的值打印到控制台classPerson#haveafirst_nameandlast_nameattributewithpublicaccessorsattr_accessor:first_nameattr_accessor:last_name#haveaclassattributecalled`people`thatholdsanarrayofobjects@@people=[]#havean`initialize`methodtoinitializeeachinstancedefinitialize(first_name,last_
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:AmazonAPIlibraryforPython?我正在寻找一个AmazonAPI,它可以让我:按书名或作者查找书籍显示书籍封面获取有关每本书的信息(价格、评级、评论数、格式、页数等)Python或Ruby库都可以(我只想要最容易使用的库)。有什么建议么?我知道在SO上还有其他一些关于此的帖子,但这些API似乎很快就过时了。[几个月前我尝试了几个建议的Ruby库,但无法让它们中的任何一个工作。]