Tag: mongodb

如何找到属性foo或bar等于查询值的对象?

我搜索谷歌并查看了文档,但我没有找到这样的例子。 我有嵌入式子项的这个对象: { teacher: “Balthazar”, students: [ { name: ‘Wilfred’, sibling: ‘Cordelia’ }, { name: ‘Mortimer’, sibling: ‘Arthur’ }, { name: ‘Cordelia’, sibling: ‘Wilfred’ }, { name: ‘Arthur’ sibling: ‘Mortimer’ }, ] } 我想找到Balthazar的学生,他们的name或sibling在[‘Wilfred’, ‘Cordelia’, ‘foo’] 。 我让它以这种方式工作: criteria_a = balthazar.students.in(name: [‘Wilfred’, ‘Cordelia’]) criteria_b = balthazar.students.in(sibling: [‘Wilfred’, ‘Cordelia’]) criteria_a << criteria_b 但有没有更简洁的方法来链接标准? 我试过链接,但它不起作用。 它产生AND交集,而不是OR 。 […]

获取模型中当前用户详细信息的好方法是什么?

我在我的rails应用程序中使用了devise gem进行身份validation。 我想在after_create回调中获得有关当前用户的某些信息。 这怎么可能? 我的型号代码是: class Department field :name after_create :create_news private def create_news @user = current_user end end 但是当我创建新部门时,我得到了以下错误。 undefined local variable or method `current_user’ for # 最好的方法是什么?

更改Mongoid中的字段类型而不会丢失数据

如何在不丢失任何数据的情况下运行迁移以更改Mongoid / MongoDB中字段的类型? 在我的情况下,我试图从BigDecimal(存储为字符串)转换为整数来存储一些钱。 我需要将字符串十进制表示转换为整数的美分。 我不想丢失现有数据。 我假设步骤可能是这样的: 使用新名称创建新的整数字段,例如amount2 部署到生产并运行迁移(或rake任务),将每个amount转换为amount2的正确值 (这整个时间现有代码仍在使用amount ,从用户的角度来看没有停机时间) 将网站停下来进行维护,再次运行迁移以捕获在过去几分钟内可能已更改的任何amount字段 删除amount并将amount重命名为amount 部署期望amount为整数的新代码 带回网站 看起来Mongoid提供了一种rename方法: http ://mongoid.org/docs/persistence/atomic.html#rename 但我有点困惑如何使用它。 如果您有一个名为amount2的字段(并且您已经删除了amount ),您是否只运行Transaction.rename :amount2, :amount ? 然后我想这会立即打破基础表示,所以你必须在那之后重启你的应用服务器? 如果您在amount仍然存在的情况下运行会发生什么? 是否会被覆盖,失败或尝试自行转换? 谢谢!

rails rails可以过滤给定字段的关联类的数量

我正在使用Rails 3和Mongoid。 我有一个Folder类,然后可以与其他User类共享 class Folder has_one :owner has_many :users 我正在尝试创建两个范围,一个可用于返回所有私人文件夹,另一个用于返回所有共享文件夹。 有没有办法计算范围内的关联数? scope :personal, where(:users.count => 0) #Erroring on count… scope :shared, where(:users.count.gt => 0) #Erroring on count… 我已经考虑过构建方法,但我更喜欢使用范围,因为我希望将它们与其他范围链接起来。

Mongoid ::错误:: MixedRelations

我有一个用户模型嵌入“ 一对多 ”的关注列表,如下所示: class User include Mongoid::Document field :uid field :name field :user_hash embeds_many :watchlists end class Watchlist include Mongoid::Document field :html_url field :description #field :name field :fork_, :type => Boolean field :forks, :type => Integer field :watchers, :type => Integer field :created_at, :type => DateTime field :pushed_at, :type => DateTime field :avatar_url embedded_in :user […]

如何规范公司名称

我们有用户生成的雇主名称,各种变化。 例如,人们输入或导入: 谷歌 谷歌公司 谷歌公司 谷歌公司 对数据库进行搜索,看起来就像一个不同的公司。 我们已经改变了一些东西,将每个雇主都映射到“标准化”的名称,但总共有70,000个,这很难手工完成。 有没有人有关于如何规范现有条目的建议,以及如何维护我们对所有传入的名称也这样做?

如何根据多个条件查找嵌入的Mongoid文档?

我有一个包含嵌入文档的Mongoid文档。 我想在其中存在具有多个条件的嵌入式文档的所有顶级文档中进行搜索。 TopDoc.where(‘inside.first_name’ => ‘Bob’, ‘inside.last_name’ => ‘Jones’) 但在我看来,这将与Bob Wever和Paul Jones的TopDoc相匹配,这是错误的。

设置mongoid哈希字段值

我在Rails项目中使用Mongoid(均为4.0.x),并且我有一个带有哈希字段的文档,该字段存储了一些无模式数据。 class Thing field :name, type: String field :mass, type: Integer field :info, type: Hash end 通过这种设置,我可以查询具有密钥的东西:endDate如下所示: Thing.where(“info.endDate”=>{‘$exists’=>true}) 这一切都很好用。 为此使用哈希字段:info字段很好,因为我想要存储的内容没有固定的模式,因而不同。 好的,但是,我不能在:info hash中使用相同的点语法来$set键/值对。 [1] thing.set(“info.endDate”=>Time.now) 引发Mongoid::Errors::UnknownAttribute错误。 它告诉我,我必须在我的模型中包含Mongoid::Attributes::Dynamic才能做到这一点,但这对我来说似乎不对。 哈希字段类型的要点似乎是允许您处理没有固定模式的数据。 看起来我不应该包含一个特殊的“动态属性”模块来使用哈希字段。 所以现在,我正在使用常规的旧[]语法更新值,然后在模型上调用save ,如下所示: thing.info[:endDate] = Time.now thing.save 但是很多时候它只是$set值会更好。 是否有其他语法来设置哈希字段值? 我错误的上述错误消息和动态属性是错误的? 我暂时不想对哈希字段进行两步更新吗? [1]诚然,我最近从mongomapper迁移过来,所以我对这种语法的期望部分是由于能够在mongomapper中做到这一点。

删除mongoid中的嵌入文档

我有一个只带有名称字段的项目模型,还有与line_items的嵌入关系。 class Project包含mongoid :: document字段:name embeds_many:line_items end class LineItem include mongoid::document field :title embedded_in :project, :inverse_of => :line_items end 我想这更像是mongo驱动程序的问题:如果我有这样的文件 db.project.find()[0] { _id : 123, name : “housework”, line_items:[ { title : “clean fridge”, _id : 601}, { title : “clean tub”, _id : 602}, { title : “clean oven”, _id : 603} ] } […]

即使使用限制,Rails Mongoid模型查询结果也会返回错误的大小/长度/计数信息

在我的rails应用程序中查询某个模型时,它会返回正确的结果,摘录size , length或count信息,甚至使用limit条件。 recipes = Recipe .where(:bitly_url => /some.url/) .order_by(:date => :asc) .skip(10) .limit(100) recipes.size # => 57179 recipes.count # => 57179 recipes.length # => 57179 我无法理解为什么会发生这种情况,它会一直显示食谱集合的总数,而且因为我使用了limit ,正确的值应该是100。 count = 0 recipes.each do |recipe| count += 1 end # WAT count # => 100 有人能帮助我吗? 谢谢! – Rails版本:3.2.3 Mongoid版本:2.4.10 MongoDB版本:1.8.4