标签: mongoid

为什么MongoDB可以创建唯一索引,但Mongoid不能?

在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会说重复键的错误.

mongodb mongoid

11
推荐指数
1
解决办法
3324
查看次数

如何使用Fabrication制作带嵌入文档的Mongoid文档?

我使用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)

mongoid ruby-on-rails-3 fabrication-gem

11
推荐指数
1
解决办法
3271
查看次数

Rails 3:如何同时使用活动记录和mongoid

我读过很多人建议将nosql与sql数据存储区一起使用.例如,在mysql中有一些报告审计跟踪或日志信息,在mongodb中有一些线程分层数据.

是否有可能在mysql和mongoid上挂起活动记录的rails?

开箱即用它似乎不起作用...任何提示?或者这是一种不推荐的方法?

ruby-on-rails mongodb mongoid ruby-on-rails-3

11
推荐指数
1
解决办法
5146
查看次数

mongoid找到VS在哪里

当我通过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)

criteria find where mongoid

11
推荐指数
1
解决办法
3857
查看次数

为什么mongo没有通过命令行连接到我的表?

一切都在我的应用程序中正确连接,但当我尝试通过命令行这样做时,我似乎无法连接.

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)

database mongodb mongoid

11
推荐指数
1
解决办法
1万
查看次数

不区分大小写的搜索mongoid中的单词

有没有办法在mongoid中为不区分大小写的搜索设置属性?

让我们说有人有一个用户名:IAmGreat我希望使用他们唯一的用户名来查找用户数据,而无需屠宰它并将其更改为iamgreat.

谢谢

indexing ruby-on-rails case-insensitive mongoid

11
推荐指数
3
解决办法
5741
查看次数

恢复mongodb数据库.bson和.json文件

在这个名为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

非常感谢你!

database ruby-on-rails mongodb mongoid

11
推荐指数
2
解决办法
7185
查看次数

别名Mongoid中的引用关系字段

在下面的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.

mongoid ruby-on-rails-3

11
推荐指数
2
解决办法
1971
查看次数

Heroku/Unicorn上的重复导轨错误 - '执行过期',一个ActionView :: Template :: Error

我的问题类似于以下内容,但情况略有不同.

Rails:执行在time_zone_select上过期

我的设置是:

  • Rails 3.2.13
  • Unicorn 4.6.2
  • Mongoid 3.0.22
  • 轻便摩托车1.4.2

在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)

ruby-on-rails heroku mongoid mlab

11
推荐指数
1
解决办法
1228
查看次数

如何不截断Mongoid日志?

这是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.

ruby ruby-on-rails mongoid

11
推荐指数
1
解决办法
720
查看次数