【问题标题】:Mongoid and RailsMongoid 和 Rails
【发布时间】:2014-03-27 18:54:19
【问题描述】:

如何将数组数据存储在mongoDB 中,然后获取并打印?我在 ruby​​ 中使用 mongoid gem:

tweet.rb

class Tweet    
    include Mongoid::Document        
    field :id, type: Integer        
    field :text, type: String        
end

我是这样存储在数据库中的:

Tweet.new(id: tweet.id, text: tweet.text)

这是正确的方法吗?如何从数据库中检索和显示?

Edit

命令行出现这个错误:

[2014-03-29 13:06:17] 错误请求行:\x00\x00\x00?]\x01\x00\x00\x00\x0 0\x00?\a\x00\x00\x00\x00\x00\x00admin.$cmd\x00\x00\x00\x00\x00????\x13\x00\x00\x 00\x10ismaster\x00\x01\x00\x00\x00\x00'. [2014-03-29 13:06:17] ERROR Errno::ECONNABORTED: An established connection was a borted by the software in your host machine. c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i nwrite' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n <<' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n_write_data' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:368:i n send_body_string' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:249:i nsend_body' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:152:i n send_response' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:110:in run' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in blo ck in start_thread' [2014-03-29 13:06:37] ERROR bad Request-Line:\x00\x00\x00?]\x01\x00\x00\x00\x0 0\x00?\a\x00\x00\x00\x00\x00\x00admin.$cmd\x00\x00\x00\x00\x00????\x13\x00\x00\x 00\x10ismaster\x00\x01\x00\x00\x00\x00'。 [2014-03-29 13:06:37] 错误 Errno::ECONNABORTED:已建立的连接是 被主机中的软件终止。 c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n write' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n_write_data' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:368:i nsend_body_string' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:249:i n send_body' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:152:i nsend_response' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:110:in run' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:inblo ck in start_thread' [2014-03-29 13:06:57] 错误请求行:\x00\x00\x00\x04^\x01\x00\x00\x00 \x00\x00?\a\x00\x00\x00\x00\x00\x00admin.$cmd\x00\x00\x00\x00\x00????\x13\x00\x0 0\x00\x10ismaster\x00\x01\x00\x00\x00\x00'. [2014-03-29 13:06:57] ERROR Errno::ECONNABORTED: An established connection was a borted by the software in your host machine. c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i nwrite' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n <<' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n_write_data' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:368:i n send_body_string' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:249:i nsend_body' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:152:i n send_response' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:110:in run' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in blo ck in start_thread' [2014-03-29 13:07:17] ERROR bad Request-Line:\x00\x00\x00\x1D^\x01\x00\x00\x00 \x00\x00?\a\x00\x00\x00\x00\x00\x00admin.$cmd\x00\x00\x00\x00\x00????\x13\x00\x0 0\x00\x10是主控\x00\x01\x00\x00\x00\x00'。 [2014-03-29 13:07:17] 错误 Errno::ECONNABORTED:已建立的连接是 被主机中的软件终止。 c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n write' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n_write_data' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:368:i nsend_body_string' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:249:i n send_body' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:152:i nsend_response' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:110:in run' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:inblo ck in start_thread' [2014-03-29 13:07:37] 错误请求行:\x00\x00\x006^\x01\x00\x00\x00\x0 0\x00?\a\x00\x00\x00\x00\x00\x00admin.$cmd\x00\x00\x00\x00\x00????\x13\x00\x00\x 00\x10ismaster\x00\x01\x00\x00\x00\x00'. [2014-03-29 13:07:37] ERROR Errno::ECONNABORTED: An established connection was a borted by the software in your host machine. c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i nwrite' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n <<' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n_write_data' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:368:i n send_body_string' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:249:i nsend_body' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:152:i n send_response' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:110:in run' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in blo ck in start_thread' [2014-03-29 13:07:57] ERROR bad Request-Line:\x00\x00\x00O^\x01\x00\x00\x00\x0 0\x00?\a\x00\x00\x00\x00\x00\x00admin.$cmd\x00\x00\x00\x00\x00????\x13\x00\x00\x 00\x10ismaster\x00\x01\x00\x00\x00\x00'。 [2014-03-29 13:07:57] 错误 Errno::ECONNABORTED:已建立的连接是 被主机中的软件终止。 c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n write' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i n_write_data' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:368:i nsend_body_string' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:249:i n send_body' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:152:i nsend_response' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:110:in run' c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:inblo ck in start_thread'

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid


    【解决方案1】:

    你很接近。

    您不能在模型上声明“id”字段;当您包含 Mongoid::Document 时会发生这种情况。

    此外,调用#new 将在您的应用程序中创建对象,但不会将其写入数据库。你的代码应该是这样的:

    tweet.rb

    class Tweet
      include Mongoid::Document
      field :text, type: String
    end
    

    创建一条新推文:

    tweet = Tweet.new(text: "Ipsum Lorem") # This does not write to the database
    tweet.save # This writes the tweet to the database
    

    检索推文:

    tweet = Tweet.find_by(text: "Ipsum Lorem")
    

    保存推文:

    tweet = Tweet.find_by(text: "Ipsum Lorem")
    tweet.text = "New text!"
    tweet.save
    # OR
    Tweet.find_by(text: "Ipsum Lorem").update_attribute(:text, "Some new text")
    

    Mongoid 非常灵活。有许多方法可以从数据库中保存和检索信息。我建议你仔细阅读the mongoid docs here

    编辑:如果您需要 id 字段顺序,there's a gem for that.

    【讨论】:

    • 显示错误提示:无法连接到副本集的主节点#<:cluster:44002572 resolved_address="nil">]>
    • 好的..这意味着您的数据库正在发生一些时髦的事情。如果您还没有,请运行命令“rails g mongoid:install”。另外,请确保您的数据库正在运行。通常“rails s”命令会解决这个问题,但由于您没有使用 ActiveRecord,因此您需要确保您的 mongodb 在启动服务器之前已经在运行。
    猜你喜欢
    • 2013-04-10
    • 2013-03-25
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多