我正在做一个具有搜索功能的小项目。我正在使用附加到使用 expressJS 和 mongoDB 构建的 REST api 的 typeahead.js。我想知道解决我遇到的两个问题的最佳方法是什么。我主要是一名刚开始使用 Node 和 MongoDB 的前端人员。这是我需要帮助的两个问题。但首先要了解一些背景知识,以便更好地理解这些问题。
我正在构建的网站允许您上传视频。您可以为这些视频添加标签。在搜索视频时,我希望能够使用 typeahead.js 搜索这些标签。就像 YouTube 一样。
问题来了。
1 - 我在 MongoDB 中有一个“标签”集合。上传视频时,我获取该视频的标签并将它们添加到我将用于预测搜索的这个集合中。随着时间的推移,这个集合应该有大量标签可供搜索。我遇到的问题是如何只插入唯一标签(那些尚不存在的标签)。例如,我想将以下文档插入 MongoDB:
{
tags: "tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8"
}
集合中已有“tag1、tag2、tag4 和 tag7”。所以我只想插入 3、5、6 和 8。我的问题/问题是执行此操作的最佳方法是什么。我是否应该首先查询集合,解析它并比较每个标签,将不存在的标签分开,然后将它们“附加”到集合中?我看到的问题是,随着时间的推移,这将有很多解析。所以我不确定这里最好的方法是什么。
2 - 将所有标签存储在集合中的一个简单数组中是最好的方法吗?随着时间的推移,这个数组将非常大。同样,我不是数据库专家,所以我不太了解如何处理此类问题。
一如既往,我们非常感谢您的帮助。
最佳答案
由于 mongodb 无法进行连接,因此我会将标签存储在每个视频文档中,如 myVideo.tags = ['sports', 'baseball', 'pitcher']。然后为您的自动建议提供动力,我会定期映射/减少视频集合并将事件标签集输出到单独的标签集合。对于在 156 个视频中使用了“棒球”标签的情况,您甚至可以计算人气分数并存储类似 {tag: 'baseball', score: 156} 的内容,并使用它来对您的视频进行排序自动建议结果,以便在用户键入“ba”时更早地显示更受欢迎的标签,例如“baseball”列在“baking”之前,因为它更有可能正确完成而不是按字母顺序排在第二位。
Here's an example of exactly this straight out of the mongodb cookbook .
关于您问题中的第 2 点,不。切勿将无限长度的数据集存储为 mongodb 文档中的数组。存在最大文档大小(目前为 16MB),因此任何会随着时间不断增长的东西都必须是不同文档的集合。
关于javascript - 在 MongoDB 中存储大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20915581/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject
我以为它们存储在cookie中-但不,检查cookie没有任何结果。session也不存储它们。那么,我在哪里可以找到它们?我需要这个来直接设置它们(而不是通过flashhash)。 最佳答案 它们存储在inyoursessionstore.自rails2.0以来的默认设置是cookie存储,但请检查config/initializers/session_store.rb以检查您是否使用默认设置以外的东西。 关于ruby-on-rails-闪存消息存储在哪里?,我们在StackOverf
对于我正在编写的Rails3应用程序,我正在考虑从本地文件系统上的XML、YAML或JSON文件中读取一些配置数据。重点是:我应该把这些文件放在哪里?Rails应用程序中是否有用于存储此类内容的默认位置?附带说明一下,我的应用程序部署在Heroku上。 最佳答案 我经常做的是:如果文件是通用配置文件:我在目录/config中创建一个YAML文件,每个环境有一个上层key如果我为每个环境(大项目)创建一个文件:我为每个环境创建一个YAML并将它们存储在/config/environments/然后我在加载YAML的地方创建了一个初始化
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
有没有办法将RubyVM::InstructionSequence存储到文件中并稍后读取?我尝试了Marshal.dump但没有成功。我收到以下错误:`dump':no_dump_dataisdefinedforclassRubyVM::InstructionSequence(TypeError) 最佳答案 是的,有办法。首先,您需要使InstructionSequence的load方法可访问,默认情况下该方法是禁用的:require'fiddle'classRubyVM::InstructionSequence#RetrieveR