草庐IT

mongoid4

全部标签

ruby-on-rails - mongoid update_attributes 改变数据类型

我正在创建一个简单的Rails应用程序来修改现有mongo数据库中的数据。我正在使用mongoid进行交互,并且可以很好地读取/销毁对象。问题是我的mongo文档有一个“节点”,它是一堆键值对,根据记录的不同而有所不同。当我像这样加载记录时:MongoObject.find(BSON::ObjectId('ABC1234567890'))=>#11,"id"=>"logIns"}>我正在使用标准Rails表单来更新值,因此发布数据如下所示:{"commit"=>"Edit","utf8"=>"✓","id"=>"ABC1234567890","mongo_object"=>{"node

ruby-on-rails - Mongoid:按嵌套子值排序

classBoxembeds_many:thingsafter_init:add_default_thingsdefadd_default_thingsself.things.build(title:"Socks",value:2)self.things.build(title:"Ring",value:1)endendclassThingfield:titlefield:value,type:Integerend所有盒子都有一些默认的东西:socks和戒指。每个人都可以将这个或其他东西添加到一个盒子里。所以现在我需要按socks数量订购所有盒子:Box.order_by(:thing

mongodb - Mongoid 5.0 支持 $lookup

有谁知道最新的5.0版本的Mongoidgem是否支持$lookup?未提及mongoiddocs. 最佳答案 您可以像这样将用于查找的mongoshell查询转换为mongoid查询。我很难弄清楚这一点。如果对任何人有帮助,请在此发布。clookup={'$lookup':{'from':"contacts",'localField':"_id",'foreignField':"account_id",'as':"contacts"}}sort={'$sort':{'_id.year':1,'_id.month':1}}docs=

ruby-on-rails - 带空格的mongoid数组

我在mongoid中使用一个数组来存储用户角色,它大部分工作正常,但我遇到了问题,rails将空白传递给一个数组,然后mongoid保存它。["","admin","editor","author"]Formtastic会自动执行此操作以避免另一个问题,我会得到什么。但是问题是mongoid保存的是数组中的空白。我怎样才能告诉它忽略空白?代码:field:roles,:type=>Array,:default=>["author"]##USERROLESROLES=%w[admineditorauthor]classargs)endend我确定我可以在before_save之前进行回调

ruby-on-rails - 使用 Mongoid 时在测试中引发质量分配异常

当使用ActiveRecord时,您可以通过将此行放在config/environments/test.rb中将其配置为在测试中引发批量分配异常:config.active_record.mass_assignment_sanitizer=:strict有没有办法用Mongoid完成同样的事情? 最佳答案 通过阅读代码,Mongoid使用ActiveModel进行批量分配保护。这与Rails中的完全相同,但配置似乎没有完全连接。从实现中我可以了解到这是发生了什么:attributes.rbassign_attributes调用pro

ruby-on-rails - 通过 _type 字段实例化 mongoid 子类

从Mongoid文档我看到如果我有以下内容:classBaseincludeMongoid::DocumentendclassInheritedA我可以执行以下操作,这些操作将与“_type”属性一起存储。a=InheritedA.newa.saveMongoid将创建以下文档。{_type:"InheritedA"}我的问题是稍后我有一个只有String_type值的函数,我希望实例化正确的类型。我试过这个:Base.new({_type:mytype});但是,Mongoid认为这是一个动态属性并拒绝了它。我知道打开动态属性不是正确的做法,因为我不想在一般情况下允许这种行为。我想避

mongodb - 如何在 Mongo 控制台和 Mongoid 中执行此查询?

我正在尝试学习如何以更高级的方式查询Mongo。假设我的数据结构是这样的:{"_id":"-bcktick-ajman-ae-292932","asciiname":"`Ajman","alternatenames":[{"isolanguage":"no","alternateNameId":2698358,"alternateName":"Ajman"},{"isolanguage":"en","alternateNameId":2698357,"alternateName":"Ajman"}]}所以要找到Ajman很容易:db.cities.find({"asciiname":"

ruby-on-rails-3 - Mongoid,如何通过 references_one 关联(以及后续关联)进行 order_by?

简单模型:classhatembedded_in:ownerfield:colorendclassownerembedds_one:hatreferenced_in:housefield:nameendclasshousereferences_one:ownerfield:numberend简单地说,我们有与所有者关联的房屋集合,所有者可以有一顶彩色帽子。我可以简单地按编号对房子进行排序:House.all.order_by([[:number,:asc]])但我想要的是以房主的名义订购房子,理想情况下我想写:House.all.order_by([[:'owner.name',:as

ruby-on-rails - Mongoid:before_destroy 和 Paranoia

Mongoid有软删除的回调吗?因为before_destory不会被触发。现在我想我可以使用before_update但它看起来不是我想要的那么清晰的解决方案并且它也没有被触发classMessageincludeMongoid::DocumentincludeMongoid::TimestampsincludeMongoid::Paranoiabefore_update:some_actionprivatedefsome_actionifself.deleted_at_changed?...#domystuffendendend所以唯一的解决方案是从Controller中的销毁操作

ruby-on-rails - Mongoid:按字段排序并跳过N条记录

我有一个包含以下数据的集合:{"_id":ObjectId("516b969beceaed363a000027"),"user":"276","item":"796","rating":1,}我想按user排序,然后在每个用户中,我想跳过前10条记录,只返回其他记录。如果用户没有10条记录,则不应返回任何内容。我还需要反过来:按用户排序,只返回前10条记录。如果用户没有10条记录,它应该返回例如6条记录。我不知道如何在不调用ruby​​脚本的情况下在Mongoid中执行此操作。有什么想法吗? 最佳答案 假设您已经定义了一个映射到该集