inverse_of在mongoid协会中意味着什么?如果没有它,我可以通过使用它而不仅仅是关联来获得什么?
我有一个集合,集合中的每个文档都有一个名为foo包含一组嵌入文档的数组.MongoDB shell中目前有一种简单的方法来计算其中有多少个实例foo?就像是:
db.mycollection.foos.count()还是db.mycollection.foos.size()?
数组中的每个文档都需要具有唯一性foo_id,我想快速计算以确保在集合中的适当随机文档的数组中包含适量的元素.
我正在建立一个简单的会计系统,用户有很多账单.现在,我正在尝试决定账单应该是自己的集合,还是嵌套在用户中.我倾向于前者,但我从来没有做过任何noSQL的东西所以我只是通过反复试验和我认为对我有意义.
据我所知,Mongo有4mb的文件大小限制,这让我觉得我应该有一个单独的账单收集,因为这些将每天累积,最终可能占用大量空间.
我只是在寻找有关此事的意见.基本上我会查询不同日期之间的用户账单(你可以想象会计系统会这样做).
并不是真的很重要,但我在Rails3项目中使用Mongoid.我想我会做类似的事情:
class User
references_many :bills
end
class Bill
referenced_in :user
end
Run Code Online (Sandbox Code Playgroud)
任何评论或设计建议都非常感谢.
我无法在主mongodb.org网站上的MongoDB中找到有关字符串数据类型的最大长度的任何信息.我来自关系数据库背景,通常有最大长度.谢谢!
我的问题类似于这个如何跳过ActiveRecord回调?但是我使用Mongoid而不是AR,似乎在当前版本的Mongoid中尚未实现,所以我想知道应该是一个优雅的解决方案来实现它.(如有必要).
您认为使用域逻辑回调的优缺点是什么?(我在Rails和/或Ruby项目的上下文中讨论.)
为了开始讨论,我想在回调中的Mongoid页面中提到这个引用:
使用域逻辑的回调是一种糟糕的设计实践,并且当链中的回调暂停执行时,可能导致难以调试的意外错误.我们建议只将它们用于跨领域的问题,例如排队后台工作.
我很想听听这个说法背后的争论或辩护.它是否仅适用于Mongo支持的应用程序?或者它旨在应用于数据库技术?
似乎"Ruby on Rails指南"对ActiveRecord验证和回调可能不同意,至少在涉及关系数据库时.举个例子:
class Order < ActiveRecord::Base
before_save :normalize_card_number, :if => :paid_with_card?
end
Run Code Online (Sandbox Code Playgroud)
在我看来,这是一个实现域逻辑的简单回调的完美示例.它似乎快速有效.如果我要接受Mongoid的建议,那么这个逻辑会转向哪里?
这个问题的解决方案可能看起来很简单,但我一直挥手无言.
我在我的Rails 4.1.4应用程序中使用Mongoid.我有一个模型,其中包含一个将包含字符串值的数组字段.
我需要模型中的Mongoid 范围来检索这个Array字段包含特定String值的实例,该值作为作用域的参数给出.假设我们有这个模型:
class SomeModel
include Mongoid::Document
include Mongoid::Timestamps
field :some_array, type: Array, default: Array.new
scope :some_scope, ->(value){ elem_match(some_array: value) }
end
Run Code Online (Sandbox Code Playgroud)
上述范围不起作用,因为很明显,在MongoDB中, $ elemMatch需要接收Criteria作为值.但是,如何判断元素必须等于给定值???
关于如何编写这个非常简单的范围的任何线索???
问候!!!.提前致谢.
如何通过Mongoid on Rails使用MongoDB编写适当的单元测试(以及针对该问题的集成测试)?
我问,因为与使用让我们说SQLite3相反,即使在运行测试时,我所做的一切仍然存在.所以目前我正在编写创建测试,然后手动删除我所做的一切.但是对于集成测试而言,它变得烦人甚至复杂.
我做的样本:
before(:each) do
@user = User.create!(@attr)
end
after(:each) do
# MongoDB is not a transactional DB, so added objects (create) during tests can't be rollbacked
# checking for the existance of a similar object with exact :name and :email (regex make it case insensitive)
cleanup = User.where(:name => "Example User", :email => /^user@example.com/i)
cleanup.destroy unless cleanup.nil?
end
Run Code Online (Sandbox Code Playgroud)
知道如何在测试期间使MongoDB不持久吗?(我甚至无法在沙箱模式下运行控制台,因为使用Mongoid我必须停用Active Record).
我有一个使用Imagemagick的应用程序,但我不得不重建我的环境,现在当我尝试上传一个头像(这就是我使用Imagemagick的原因)时,它在我尝试添加图像时不断给我以下错误.
Avatar Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: ImageMagick/GraphicsMagick is not installed
Run Code Online (Sandbox Code Playgroud)
我将它安装在包含我的应用程序的文件夹中,但似乎应用程序无法识别安装.有没有办法让应用程序识别minimagick或我是否在错误的地方安装它或我完全关闭.
-UPDATE-
我卸载了minimgick并重新安装,但仍然得到相同的错误,虽然它显示它已安装.这是我的版本......
-imagemagick-6.9.1-6
-ruby 2.2.1p85(2015-02-26修订版49769)[x86_64-darwin14]
-Rails 4.0.10
- 在mac上运行
我正在使用最新的mongoid ......
我如何做这个活动记录named_scope的mongoid等价物:
class Comment
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :post
field :body, :type => String
named_scope :recent, :limit => 100, :order => 'created_at DESC'
...
end
Run Code Online (Sandbox Code Playgroud) mongoid ×10
mongodb ×6
ruby ×2
activerecord ×1
arrays ×1
associations ×1
minimagick ×1
named-scope ×1
nosql ×1
persistence ×1
relationship ×1
scope ×1
testing ×1