在定义要返回的字段(collection.find(q, fields))时,mongoDB是否(如何)支持比较字段名称(而不是值)?
例如根据名称选择一系列字段而不考虑其值。
假设文档中有以下字段(无论值是什么):
fieldA000 fieldA001 fieldA002 fieldB000 fieldB001 fieldC000 ...
并且我想限制任何匹配 fieldA000 到 fieldA999 的字段名称的返回字段(无需明确定义任何字段名称)或 fieldA.*(reg ex ) 或类似内容。
P.S.:我目前正在评估我们是否可以使用 mongoDB 而不是 Cassandra,其中以一种非常易于使用的方式提供了列范围/切片选择。
最佳答案
Mongo 无法使用键名上的正则表达式来匹配文档。
但是,您可以使用 $where 来做到这一点它允许您使用执行 JavaScript 来选择每个文档。 $where 的缺点是它不能利用索引,因此它需要反序列化集合中的每个文档,这对于大多数应用程序来说太慢了。
在 Mongo 中执行此操作的另一种方法是使用 $exists 和 $or 但它需要明确的键名。
像这样的模式对于这种类型的查询会更有效,并且还有助于使用 $ 在服务器上进行切片。 :
{
dataFields: [
{ id: 'A000', value: 'whatevs' },
{ id: 'A001', value: 'whatevs' },
{ id: 'A002', value: 'whatevs' },
{ id: 'B000', value: 'whatevs' },
{ id: 'B001', value: 'whatevs' },
{ id: 'C000', value: 'whatevs' },
]
}
或:
{
dataFields: [
{ lettter: 'A', number: 0, value: 'whatevs' },
{ lettter: 'A', number: 1, value: 'whatevs' },
{ lettter: 'A', number: 2, value: 'whatevs' },
{ lettter: 'B', number: 0, value: 'whatevs' },
{ lettter: 'B', number: 1, value: 'whatevs' },
{ lettter: 'C', number: 0, value: 'whatevs' },
]
}
关于mongodb - mongoDB 可以比较字段名而不是字段值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16061742/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?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,如果没有检查,请帮助我,非常感谢,谢谢
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我知道我可以指定某些字段来使用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
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法