我一直在用mongoid存储数据.我有一个场景,我必须根据他们的家属数量对父母进行排序.我的模型很简单:
父模型references_many dependents stored_as => array
依赖模型reference_many父项stored_as => array
我不想遍历父节点,找到dependents的数量,将它们存储在一个数组中并将它们转储到我的视图中.
我需要的是只用一个查询根据家属的数量对父母进行排序.那可能吗?
谢谢.
我看到了这个:
undefined method `level' for #<Mongoid::Logger:0xcd1a1f>
Run Code Online (Sandbox Code Playgroud)
当我在我的init中设置Mongoid记录器时.记录器通过简单的方式设置:
Mongoid.logger = Logger.new($stdout)
Run Code Online (Sandbox Code Playgroud)
在global.rb中
这是什么问题?如何让Mongoid登录我自己的记录器,以便查看一些查询?
我也试图无济于事:
Mongoid.logger = Logger.new($stdout, :info)
Run Code Online (Sandbox Code Playgroud) 我有一个mongo表,其中包含如下统计数据....
which is a string, played or completed所以我的班级如下......
class Statistic
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Paranoia
field :course_id, type: Integer
field :status, type: String # currently this is either play or complete
Run Code Online (Sandbox Code Playgroud)
我想每天获得一个课程总数的数量.所以例如... 8/1/12有2个剧本,8/2/12有6个剧本.等等.因此我将使用created_at时间戳字段,使用course_id和action.问题是我没有看到Mongoid中的group by方法.我相信mongodb现在有一个,但我不确定如何在rails 3中完成.
我可以使用每个来运行表格,并在轨道中加入一些地图或散列,但是如果课程有100万个视图,那么检索和迭代超过一百万条记录可能会很麻烦.有干净的方法吗?
ruby-on-rails mongodb mongoid ruby-on-rails-3 ruby-on-rails-3.2
可能是这样的:
@users = User.criteria.for_ids(params[:user_ids])
@users.update_all(:suspend => true)
Run Code Online (Sandbox Code Playgroud)
代替:
for u in @users
u.suspend = true
u.update_attributes
end
Run Code Online (Sandbox Code Playgroud) ruby ruby-on-rails mongoid ruby-on-rails-3 ruby-on-rails-3.1
我正在一个社交网络项目中工作,建议的数据库是MongoDB。
我之前曾参与过各种项目,并在关系数据库系统中设计了数据库,但是由于我是NoSQL db(MongoDB)的新手。我一直在设计东西。
考虑下面的示例,
1)该应用程序将具有“用户和朋友”表来保存用户和用户的数据。
现在,下面的设计正确吗?
用户:
_id username password other_fields
----------------------------------------
2gsyexej2 balan adsfasf ..
Run Code Online (Sandbox Code Playgroud)
user_friends:
_id user_id friends
--------------------
1 2gsyexej2 friends
- 0
- friend_user_id = asdfdf23adfsasdf
- 1
- friend_user_id = efex89sdfsw0dfssf
etc.,
Run Code Online (Sandbox Code Playgroud)
在以上模型中,我使用了“手册参考”,从用户表中获取了用户ID,并将其用作user_friends表中的参考。
这种方法正确吗?如果没有,请提出一个更好的方法。
谢谢,
巴兰
给定与这样的扩展的简单嵌入关系:
class D
include Mongoid::Document
embeds_many :es do
def m
#...
end
end
end
class E
include Mongoid::Document
embedded_in :d
end
Run Code Online (Sandbox Code Playgroud)
你可以这样说:
d = D.find(id)
d.es.m
Run Code Online (Sandbox Code Playgroud)
在扩展程序的m方法中,如何访问d我们正在使用的特定内容?
我在Mongo中有一个带有两个数组字段的文档:
field :app_usernames, type: Array
field :email_addresses, type: Array
Run Code Online (Sandbox Code Playgroud)
我想创建一个函数,它将一组用户名和一组电子邮件地址用于搜索集合.踢球者是我希望它返回具有数组中传递的任何值的文档:
def find_people(usernames_to_search, emails_to_search)...
Run Code Online (Sandbox Code Playgroud)
所以给出一个带字段值的文档:
app_usernames = ['test1','test2','test3']
email_addresses = ['test1@test.com','test2@test.com']
Run Code Online (Sandbox Code Playgroud)
我希望函数在通过数组参数搜索任何值时找到它.它应该在以下情况下返回此文档:
find_people nil,['test1@test.com']
find_people ['test3'],['test1@test.com']
find_people ['oldusername'],['test1@test.com']
Run Code Online (Sandbox Code Playgroud)
最后一个似乎给我带来了麻烦.
到目前为止,我已经尝试过
.or(:app_usernames.in usernames_to_search, :email_addresses.in emails_to_search)
Run Code Online (Sandbox Code Playgroud)
但无济于事.
在Mongoid中,我可以在类型为Hash的字段的属性上设置索引,如下所示:
index({ "details.fullName" => 1 }, { name: "full_name_index" })
Run Code Online (Sandbox Code Playgroud)
我想做的是使用以下内容为这些实体创建验证:
validates "details.fullName", presence: true
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会产生以下错误:
NoMethodError:未定义的方法`details.fullName'用于Thing
我是否犯了语法错误,或者是否在Mongoid 3中不支持此功能?
我尝试使用mongolab(仅限rails框架)将我的新rails应用程序部署到heroku
$ rails new myapp --skip-active-record
$ cd myapp
Run Code Online (Sandbox Code Playgroud)
湾 将Gems添加到Gemfile
ruby '2.2.0'
gem 'mongoid', '~> 4', github: 'mongoid/mongoid'
gem 'bson_ext'
group :production do
gem 'rails_12factor'
end
Run Code Online (Sandbox Code Playgroud)
C.捆绑这些宝石并生成mongoid.yml
$ bundle install
$ rails g mongoid:config
Run Code Online (Sandbox Code Playgroud)
d.config mongoid.yml添加/修改生产以使用mongolab
mongoid.yml
production:
sessions:
default:
uri: <%= ENV['MONGOLAB_URI'] %>
Run Code Online (Sandbox Code Playgroud)
即 创建git和heroku应用程序
$ git init
$ git add .
$ git commit -am 'Initial Commit'
$ heroku login
$ heroku apps:create myapp
Run Code Online (Sandbox Code Playgroud)
F.插件蒙古包
$ heroku addons:add mongolab
Run Code Online (Sandbox Code Playgroud)
和mongolab沙箱显示:
蒙古拉沙箱:
To connect using the shell:
mongo …Run Code Online (Sandbox Code Playgroud) 这可能看起来像一个矛盾,一个"条件默认",但我想知道是否有一种方法,我只能在对象不是某种类型的情况下轻松处理为字段设置默认值.
例如,我有
field :object_type, type: String
field :price, type: Float, default: 0
validates :price, presence: true, numericality: { greater_than_or_equal_to: 0 }
Run Code Online (Sandbox Code Playgroud)
如果我可以添加一个条件unless: ->{ object_type == "a"}并且照顾这个内联,那将是很好的.rails会允许或者我现在必须使用before_create回调设置此条件默认值吗?
我希望发生的伪代码:
如果object_type是除"a"之外的任何其他类型,那么我想将price的默认值设置为零.
如果对象类型是a,我只希望零和非负数值可以接受