如果该字段是整数,则执行以下操作:
User.where(id: [1,3,5])
Run Code Online (Sandbox Code Playgroud)
但是如果该字段是一个数组怎么办?例如,用户有一个字段,该字段是以下数组favorite_numbers:
如何查找 favorite_number 为 1、3 或 5 的用户?
Rails 4.1.7
Mongoid 5.0.0
编辑:添加了 Mongoid。
我正在尝试找到一种使用 mongoid 更新单个数组项的方法。我正在使用 Rails 4 和 Mongodb。
我的模型看起来像这样
class User
include Mongoid::Document
include Mongoid::Timestamps
field :my_book_list, type: Array, default: []
field :book_name, type: String
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码向数组字段添加条目:
User.where(id: self.user_id).add_to_set("my_book_list" => self.book_name)
Run Code Online (Sandbox Code Playgroud)
将数据添加到数组后,在数据库中它看起来像这样
db.collection.users
{
"_id" : ObjectId("56e09d54a0d00b0528000001"),
"status" : true,
"sign_in_count" : 3,
"my_book_list" :
["Learning Ruby", "MongoDB for Dummies"]
}
Run Code Online (Sandbox Code Playgroud)
我正在努力解决的是找到一种 Rails / Mongoid 方法,通过查找名称来更新数组中项目的值。
简单地说,如何通过名称搜索而不知道其索引来更改 my_book_list[1] 的值。在本例中,索引 1 是“MongoDB for Dummies”,需要更新为“MongoDB”。这样“my_book_list”数组字段在更新后看起来像这样:
db.collection.users
{
"_id" : ObjectId("56e09d54a0d00b0528000001"),
"status" : true,
"sign_in_count" : 3,
"my_book_list" :
["Learning Ruby", "MongoDB"]
}
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?
我无法理解与从 Mongo 数据库集合中的磁盘读取数据相关的瓶颈所在。我知道索引是优化查询的重要因素,但假设我们有一个没有索引的集合,并且我正在一个包含 2500 万条记录、大小约为 50Gb 的集合中运行一个简单的查询:
db.customers.find({ first_name: "xyz" })
Run Code Online (Sandbox Code Playgroud)
当然,这必须运行 a COLLSCAN,所以它非常慢(除非它缓存在内存中)。但在我们的例子中,有多慢是很重要的。运行一些测试表明,我运行此查询的计算机并未与我的可用 IOPS 挂钩。在最大读取 IOPS 约为10K 的计算机上,这个简单的查询被限制在1.2K左右。注意CPUiowait

查询显然受到磁盘的限制,但它没有充分利用机器上可用的潜力。有趣的是,当我创建另一个数据库连接并异步运行两个查询时,IOPS 负载增加了 2 倍。似乎每个查询一次只能扫描磁盘上的这么多数据。运行这些没有索引的查询时,是什么阻碍了它?
从长远来看,我认为在尝试对大量不同数据进行复杂搜索时,将 Elasticsearch 引擎耦合起来会有所帮助,但我真的很好奇为什么在这种情况下我们不能垂直扩展。
我正在使用rails3 edge和mongoid 2beta6和ruby 1.9.2-head.
如何手动更改表名,就像ActiveRecord的set_table_name一样?例如,我的模型注册应该使用表"users"进行存储,而不是"注册".
另一个问题是如何实现AR提供的attr_accessible bevahior?
谢谢,科林
ruby-on-rails tablename attr-accessible mongoid ruby-on-rails-3
我上周才开始使用Mongoid.我遇到了这个关联问题,我不确定我的方法是否正确.所以我想我会问一些意见
我有一个User模型和一个Project模型类User包括Mongoid :: Document字段:email end class Project包括Mongoid :: Document字段:name end
实际上,用户模型是由身份验证宝石Devise创建的,所以我猜它不能嵌入到Project中.
因此,如果我想要旧的多对多关联,其中用户可以拥有许多项目,而项目可以拥有许多用户.我该如何设置?
我的方法是这样的:class User包括Mongoid :: Document字段:email references_many:projects referenced_in:project,:inverse_of =>:users end class Project include Mongoid :: Document field:name references_many:users referenced_in:user,:inverse_of => :项目结束
这是关于MongoDB架构进行这种多对多关联的正确方法吗?
谢谢
我正在开始研究Rails 3中的一个大型项目.我想使用MySql和MongoDB构建应用程序.我已经知道如何将Rails与MySql一起使用,并且已经找到了很多关于使用MongoDB和rails的信息.但是我无法找到关于同时使用MySql和MongoDB的任何好信息.我正在看Mongoid项目,并认为使用它会很好,我想我不知道它是否是最好的解决方案.
在安装/配置部分下的Mongoid站点上,它讨论了同时使用Mongoid和ActiveRecord,但它没有解释如何.
所以,我希望有人可以告诉我如何设置Mongoid和ActiveRecord一起工作,或者更好的解决方案.
大家好我有一个类似下面的类爬行器模型:
class Link
include Mongoid::Document
include Mongoid::Timestamps
field :url, type: String
field :links, type: String
index :url
has_many :pages
end
Run Code Online (Sandbox Code Playgroud)
如果链接重复URL并且它们有许多入站/出站连接,我想让它工作,所以:
a_link.links # => gives a list of outbound link objects.
Run Code Online (Sandbox Code Playgroud)
怎么用mongoid呢?
所以,我在嵌入式文档中遇到了一些用户身份验证问题.我有两个文件,一个嵌入另一个.一个企业有很多成员.模型看起来像这样:
class Member
include Mongoid::Document
field :username, type: String
field :password, type: String
embedded_in :business
validates :username, :presence => true, :uniqueness => true, :length => 5..60
end
class Business
include Mongoid::Document
field :name, type: String
embeds_many :members
end
Run Code Online (Sandbox Code Playgroud)
问题是它没有验证每个模型中用户名的唯一性.当我在一个企业中保存一个成员时,我可以保存一千个相同的名字.这当然不适用于良好的身份验证系统.我使用的是Mongoid 2,Rails 3和Ruby 1.9
我正在尝试创建一个种子文件来填充我的mongo数据库.nil我尝试定义数组字段值时,以下语法创建一个值.我正在使用mongoid v3.0.9.我究竟做错了什么?
当我将它们放在种子文件中时,以下示例不起作用:
User.create(name:'name', test_array_field:'[123,123]')
User.create(name:'name', test_array_field:[123,123])
User.create(name:'name', test_array_field:[123,123].to_a)
Run Code Online (Sandbox Code Playgroud)
我在课堂上定义了这样的字段:
field :test_array_field, type: Array
Run Code Online (Sandbox Code Playgroud) 我正在尝试跟踪用户的当前,之前和所选(期末更改)订阅状态.
在每月结束时,如果chosen_subscription != current_subscription,current_subscription改变了.
class User
include Mongoid::Document
embeds_one :previous_subscription, class_name: "Subscription"
embeds_one :current_subscription, class_name: "Subscription"
embeds_one :chosen_subscription, class_name: "Subscription"
end
class Subscription
include Mongoid::Document
embedded_in :user
field :plan, type: String
field :credits, type: Integer
field :price_per_credit, type: BigDecimal
field :start, type: Date
field :end, type: Date
end
Run Code Online (Sandbox Code Playgroud)
Mongoid希望我以一种对我没有意义的方式更多地指定它:
Mongoid::Errors::AmbiguousRelationship:
Problem:
Ambiguous relations :previous_subscription, :current_subscription, :chosen_subscription defined on User.
Summary:
When Mongoid attempts to set an inverse document of a relation in memory, it needs to …Run Code Online (Sandbox Code Playgroud) mongoid ×10
mongodb ×7
ruby ×2
activemodel ×1
activerecord ×1
arrays ×1
mysql ×1
tablename ×1
web-crawler ×1