当前位置:首页 > 开发 > 编程语言 > Ruby > 正文

Rails3.2使用mongoDB学习笔记之mongoid

发表于: 2012-05-31   作者:hotsunshine   来源:转载   浏览次数:
摘要: 前段时间写过一个mongo_mapper的demo程序,在写那个测试程序的时候,看见很多人都说mongoid更好,于是打算用一下试试,写了好久了,最近公司比较忙,没时间整理,现在贴出来。 新建项目 rails new spec_mongoid 一、mongonid    官方首页 http://mongoid.org/   1、安装gem &
前段时间写过一个mongo_mapper的demo程序,在写那个测试程序的时候,看见很多人都说mongoid更好,于是打算用一下试试,写了好久了,最近公司比较忙,没时间整理,现在贴出来。

新建项目
rails new spec_mongoid


一、mongonid
   官方首页 http://mongoid.org/
  1、安装gem
    Gemfile中添加安装
    gem "mongoid"
    gem "bson_ext"

  2、配置
    执行命令:
    $ rails g mongoid:config

    会在系统中生成一个mongoid的配置文件
    
create  config/mongoid.yml


    如果出现 Could not find a JavaScript runtime.这个错误请在Gemfile中添加
    gem 'execjs'
    gem 'therubyracer'

    修改config/application.rb文件,注释
    # require 'rails/all'

    用下面几行取而代之
    require "action_controller/railtie"
    require "action_mailer/railtie" 
    require "active_resource/railtie"
    require "rails/test_unit/railtie"

   
    把文件environment/development.rb和environment/test.rb中注释掉
    # config.active_record.mass_assignment_sanitizer = :strict 
    # config.active_record.auto_explain_threshold_in_seconds = 0.5
 


    删除database.yml这个文件

    记得加载
    Mongoid.load!("path/to/your/mongoid.yml")


    日志application.rb中添加
    config.mongoid.logger = Logger.new($stdout, :warn)

    关闭日志的方法是在mongoid的配置文件中
     logger: false


  3、语言
    创建config/initializers/mongoid.rb
    添加代码
    Mongoid.add_language("zh-CN")

    如果是支持所有语言的话
    Mongoid.add_language("*")



=======================
问题
我用的全部都是最新版本,绝对的小白鼠阿,遇到了如下恶心问题
host is not a valid option for Mongo::Connection

官方说这是一个bug,需要重新安装这个gem
修改
gem 'mongoid', :git => 'git://github.com/mongoid/mongoid.git'

但是弄完了之后,又出现这个
undefined method `add_language' for Mongoid:Module (NoMethodError)

只好把mongo.rb中的 
#Mongoid.add_language("*")
注释掉
=======================

$ rails g model user
      invoke  mongoid
      create    app/models/user.rb
      invoke    test_unit
      create      test/unit/user_test.rb
      create      test/fixtures/users.yml


上面的命令在执行之后,给user.rb自动加上Mongoid的引用
   class User
     include Mongoid::Document   
   end

随后运行rails console,测试了几个代码
ruby-1.9.2-p180 :003 > User.create(:name=>"李磊")
 => #<User _id: 4f630bf1421aa97127000001, _type: nil, name: "李磊", login: nil, age: nil>
ruby-1.9.2-p180 :002 > user = User.find('4f630bf1421aa97127000001')
 => #<User _id: 4f630bf1421aa97127000001, _type: nil, name: "李磊", login: nil, age: nil> 
ruby-1.9.2-p180 :004 > user.update_attributes(:name=>"李磊",:login=>"lilei",:age=>15)
 => true 
ruby-1.9.2-p180 :005 > user
 => #<User _id: 4f630bf1421aa97127000001, _type: nil, name: "李磊", login: "lilei", age: 15>
 


总体还算是成功

写个单元测试试一试
先把test_helper.rb中的下面代码注释掉
  # fixtures :all

然后在user_test.rb中添加:
# encoding: utf-8
require 'test_helper'

class UserTest < ActiveSupport::TestCase
  test "create a User" do
    assert_difference "User.count",1 do
      User.create(:name=>"李磊",:age=>15,:login=>"lilei")
    end 
    lilei = User.last
    assert_equal [lilei.name,lilei.age,lilei.login],["李磊",15,"lilei"]
  end 
end

运行单元测试:
rake test:units
Started
.
Finished in 0.020769 seconds.

1 tests, 2 assertions, 0 failures, 0 errors, 0 skips



总结:
除了那个新版本不稳定的bug之外,总体上比mongomaper还是简单一些,需要配置的东西很少
但是官网的说明文档是在是不敢恭维,导航的体验太差了,尤其是上下级的那个色调。



实例代码地址
https://github.com/chinacheng/spec_mongoid

Rails3.2使用mongoDB学习笔记之mongoid

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Inserting Document-Orientation 在描述中,MongoDB是面向文档的,意味着在这种数据库中主要存储单
MongoDB学习笔记之 第1章 MongoDB的安装 MongoDB学习笔记之 第2章 MongoDB的增删改查 MongoDB学习笔
MongoDB学习笔记之 第1章 MongoDB的安装 MongoDB学习笔记之 第2章 MongoDB的增删改查 MongoDB学习笔
MongoDB学习笔记之 第1章 MongoDB的安装 MongoDB学习笔记之 第2章 MongoDB的增删改查 MongoDB学习笔
MongoDB学习笔记之 第1章 MongoDB的安装 MongoDB学习笔记之 第2章 MongoDB的增删改查 MongoDB学习笔
1. Mac 安装mongodb:   官网下载mac版mongodb,解压到本地目录,如/Applications/mongodb,注意这
sharding(分片功能) 手动分片:所有数据库都支持,但是需要应用程序自行维护连接、存储和查询,难以
一、前言   最近开始学习非关系型数据库MongoDB,却在博客园上找不到比较系统的教程,很多资料都
MongoDB的设计理念:能从服务器端转移到驱动程序来做的事,就尽量转移。 文档是MongoDB的核心概念。
MongoDB中使用find来进行查询,查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号