标签: mongoid

如何检查 Mongoid 数组字段是否包含另一个数组中的一项或多项?

如果该字段是整数,则执行以下操作:

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。

arrays ruby-on-rails mongodb mongoid ruby-on-rails-4

3
推荐指数
1
解决办法
1484
查看次数

使用 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)

我该如何实现这一目标?

ruby-on-rails mongodb mongoid ruby-on-rails-4

3
推荐指数
1
解决办法
3089
查看次数

Mongo磁盘大数据集读取瓶颈和IOPS限制

我无法理解与从 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 引擎耦合起来会有所帮助,但我真的很好奇为什么在这种情况下我们不能垂直扩展。

mongodb mongoid mongodb-query mongodb-atlas

3
推荐指数
1
解决办法
2974
查看次数

mongoid,set_table_name和attr_accessible

我正在使用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

2
推荐指数
1
解决办法
2329
查看次数

如何mongoid项目<= has_many =>用户

我上周才开始使用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架构进行这种多对多关联的正确方法吗?

谢谢

ruby-on-rails mongodb mongoid

2
推荐指数
1
解决办法
2318
查看次数

Rails 3 MySql和MongoDB

我正在开始研究Rails 3中的一个大型项目.我想使用MySql和MongoDB构建应用程序.我已经知道如何将Rails与MySql一起使用,并且已经找到了很多关于使用MongoDB和rails的信息.但是我无法找到关于同时使用MySql和MongoDB的任何好信息.我正在看Mongoid项目,并认为使用它会很好,我想我不知道它是否是最好的解决方案.

在安装/配置部分下的Mongoid站点上,它讨论了同时使用Mongoid和ActiveRecord,但它没有解释如何.

所以,我希望有人可以告诉我如何设置Mongoid和ActiveRecord一起工作,或者更好的解决方案.

mysql activerecord mongodb mongoid ruby-on-rails-3

2
推荐指数
1
解决办法
1891
查看次数

mongoid自我与自我关系?

大家好我有一个类似下面的类爬行器模型:

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呢?

ruby web-crawler mongoid

2
推荐指数
1
解决办法
1703
查看次数

Rails 3和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

ruby ruby-on-rails mongodb activemodel mongoid

2
推荐指数
1
解决办法
1414
查看次数

在mongoid中使用create时如何定义数组字段?

我正在尝试创建一个种子文件来填充我的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)

mongoid

2
推荐指数
1
解决办法
3462
查看次数

Mongoid将一个类嵌入为多个字段

我正在尝试跟踪用户的当前,之前和所选(期末更改)订阅状态.

在每月结束时,如果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)

ruby-on-rails mongodb mongoid

2
推荐指数
1
解决办法
1824
查看次数