在MongoDB shell中,如果我执行以下操作,则会创建索引,并且还会阻止插入重复记录:
db.analytics.ensureIndex({page: 1, some_id: 1, ga_date: -1}, {unique: true});
Run Code Online (Sandbox Code Playgroud)
但我认为Mongoid也可以这样做:http://mongoid.org/docs/indexing/
所以我有:
class PageAnalytic < Analytic
include Mongoid::Document
field :page, :type => String
field :some_id, :type => Integer
field :ga_date, :type => Time
field :pageviews, :type => Integer
field :timeOnPage, :type => Integer
index(
[
[ :page, Mongo::ASCENDING ],
[ :some_id, Mongo::ASCENDING ],
[ :ga_date, Mongo::DESCENDING ]
],
:unique => true
)
end
Run Code Online (Sandbox Code Playgroud)
做一个
rake db:create_indexes
Run Code Online (Sandbox Code Playgroud)
但是,是否可以插入重复记录?
更新:这很奇怪,但是我在MongoDB shell中添加了索引并删除了集合,然后在MongoDB Shell或Mongoid中重新创建了索引,现在我可以将集合放到MongoDB shell中,然后rake创建索引,并使用mongoid两次添加相同的文档,mongod会说重复键的错误.
我使用Mongoid和Fabrication宝石.我从beta20切换到Mongoid.rc7,现在我无法使用嵌入文档制作文档:
#Models
class User
include Mongoid::Document
embeds_many :roles
end
class Role
include Mongoid::Document
field :name, :type => String
embedded_in :user, :inverse_of => :roles
end
#Fabricators
Fabricator(:role) do
name { "role" }
end
Fabricator(:user) do
email { Faker::Internet.email }
password { "password" }
password_confirmation { |user| user.password }
roles { [] }
end
Fabricator(:admin_user, :from => :user) do
roles(:count => 1) { |user| Fabricate(:role, :user => user, :name => "admin") }
end
Run Code Online (Sandbox Code Playgroud)
当我尝试制作时,admin_user我得到没有角色的用户.当我尝试制作角色时,我收到错误.
#<User _id: 4d62a2fd1d41c87f09000003, email: …Run Code Online (Sandbox Code Playgroud) 我读过很多人建议将nosql与sql数据存储区一起使用.例如,在mysql中有一些报告审计跟踪或日志信息,在mongodb中有一些线程分层数据.
是否有可能在mysql和mongoid上挂起活动记录的rails?
开箱即用它似乎不起作用...任何提示?或者这是一种不推荐的方法?
当我通过ID搜索时,我似乎只对1个特定模型有这个问题
>> Cart.where(:_id => '4dae5902e1607c232c000009').first
=> #<Cart _id: 4dae5902e1607c232c000009, _id: BSON::ObjectId('4dae5902e1607c232c000009'), _type: nil>
>> Cart.find('4dae5902e1607c232c000009')
Mongoid::Errors::DocumentNotFound: Document not found for class Cart with id(s) 4dae5902e1607c232c000009.
Run Code Online (Sandbox Code Playgroud)
奇怪的是,与其他型号,我可以使用发现就好了.有任何想法吗?
堆栈的其余部分是......
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/criterion/inclusion.rb:192:in `execute_or_raise'
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/criterion/inclusion.rb:190:in `tap'
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/criterion/inclusion.rb:190:in `execute_or_raise'
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/criterion/inclusion.rb:106:in `find'
from /Library/Ruby/Gems/1.8/gems/mongoid-2.0.1/lib/mongoid/finders.rb:67:in `find'
from (irb):37
Run Code Online (Sandbox Code Playgroud) 一切都在我的应用程序中正确连接,但当我尝试通过命令行这样做时,我似乎无法连接.
mongod --port 27018 --dbpath ~/code/server/db/seed
Wed Jul 27 15:49:08 MongoDB starting : pid=84222 port=27018 dbpath=/Users/jeremysmith/code/server/db/seed 64-bit
Wed Jul 27 15:49:08 db version v1.6.5, pdfile version 4.5
Wed Jul 27 15:49:08 git version: 0eb017e9b2828155a67c5612183337b89e12e291
Wed Jul 27 15:49:08 sys info: Darwin erh2.10gen.cc 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_40
Wed Jul 27 15:49:08 [initandlisten] waiting for connections on port 27018
Wed Jul 27 15:49:08 [websvr] web admin interface listening on port 28018
$ …Run Code Online (Sandbox Code Playgroud) 有没有办法在mongoid中为不区分大小写的搜索设置属性?
让我们说有人有一个用户名:IAmGreat我希望使用他们唯一的用户名来查找用户数据,而无需屠宰它并将其更改为iamgreat.
谢谢
在这个名为my_backupI的文件夹中,我有一个包含所有模型/集合的mongodb数据库转储,例如:
admins.bson
admins.metadata.json
categories.bson
categories.metadata.json
pages.bson
pages.metadata.json
.
.
.
Run Code Online (Sandbox Code Playgroud)
我有一个名为ubuntu_developmentmongodb 的数据库.我正在努力rails 3 + mongoid
如何将文件夹中的所有模型/集合导入/恢复my_backup到我的数据库ubuntu_development
非常感谢你!
在下面的Mongoid模型中,我如何为belongs_to关系字段添加别名?
class Contact
field :nm, :as => :name, :type => String # field aliasing
embeds_one :address, :store_as => :ad # embedded document aliasing
belongs_to :account # referenced relation doesn't support store_as
end
Run Code Online (Sandbox Code Playgroud)
我想将帐户ID存储在一个名为ac而不是的字段中account_id.
我的问题类似于以下内容,但情况略有不同.
我的设置是:
在Heroku Cedar上运行.MongoDB在MongoLab上托管.
错误分批进行,并且通常由Heroku进程重启来解决.第一个通常是下面的那个:
An ActionView::Template::Error occurred in [controller]#[action]:
execution expired
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read'
Run Code Online (Sandbox Code Playgroud)
以下是堆栈跟踪的最高位.如果需要,很乐意添加更多!
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `block in read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:118:in `handle_socket_errors'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:177:in `read_data'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:99:in `block in read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:202:in `with_connection'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:97:in `read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/protocol/query.rb:163:in `receive_replies'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:135:in `block in receive_replies'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:134:in `map'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:134:in `receive_replies'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:553:in `block (2 levels) in flush'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:129:in `ensure_connected'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:551:in `block in flush'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:566:in `logging'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:550:in `flush'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:539:in `process'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:349:in `query'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/cursor.rb:138:in `block in load_docs'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/session/context.rb:105:in `block in …Run Code Online (Sandbox Code Playgroud) 这是Mongoid记录操作的方式:
D, [2016-01-12T18:42:19.790639 #7906] DEBUG -- : MONGODB | localhost:27017 | app_test.update | STARTED | {"update"=>"users", "updates"=>[{"q"=>{"_id"=>BSON::ObjectId('5695652bc54d2d1ee200001e')}, "u"=>{"$addToSet"=>{"favorite_ids"=>{"$each"=>[BSON::ObjectId('5695652bc54d2d1ee200001f')]}}}, "multi"=>false, "upsert"=>false}], "writeConcern"=>{:w=>1}, "orde...
Run Code Online (Sandbox Code Playgroud)
我希望能够看到完整的日志消息.那可能吗?
Obs:我正在使用Mongoid 5.