MongoDB Ruby 之 MongoDB - CRUD

michael_roshen · 2013年09月05日 · 最后由 neverlandxy_naix 回复于 2013年09月12日 · 8082 次阅读
require "rubygems"
require "mongo"

#make a connection
#db = Mongo::Connection.new.db("mydb")
#db = Mongo::Connection.new("localhost").db("mydb")
#db = Mongo::Connection.new("localhost", 27017).db("mydb")
#
#conn = Mongo::Connection.new()
conn = Mongo::Connection.new("localhost")
puts conn.class            # Mongo::Connection
puts conn.database_names

db = Mongo::Connection.new.db('TestData')
col_1 = db.collection('users')
col_2 = db["users"]

#[]是collection的别名
p col_1.count
p col_1.find_one
p col_2.find_one
#{"_id"=>BSON::ObjectId('52232ffde5cd1c851ebbcd5d'), "age"=>55.0, "name"=>"xuqi", "status"=>"a"}
#{"_id"=>BSON::ObjectId('52232ffde5cd1c851ebbcd5d'), "age"=>55.0, "name"=>"xuqi", "status"=>"a"}
#查询
db['users'].find({ "age" => {"$gt" => 53}}).each do |row|
  p row
end
p "-------------------------------"
db['users'].find.each do |row|
  p row
end
#插入
user = {"age"=>55.0, "name"=>"wuhao", "status"=>"a"}
col_1.insert(user)
p col_1.count
#更新
col_1.update({:name => "wuhao"}, {"$set" => {:age => 23}})
p col_1.find({:name => "wuhao"}).first
#删除
col_1.remove({:name => "wuhao"})
p col_1.count

资料:http://www.railstips.org/blog/archives/2009/06/27/mongomapper-the-rad-mongo-wrapper/

不知道用 ruby 怎么写 mapreduce, 研究中。。。

#1 楼 @neverlandxy_naix 哈哈,一浪更比一浪强,怎么说 mongodb 也是 mongoid 他爹

我一年前的代码,现在版本更新不一定能跑,仅供参考

https://github.com/chloerei/code_campo/blob/master/app/models/tag.rb

官方 ruby 驱动的接口我没直接调用过,估计差不多 http://api.mongodb.org/ruby/current/Mongo/Collection.html#map_reduce-instance_method

PS:1,2 楼讨论问题能不能谦虚一点?

#4 楼 @Rei 果然大神风范,thx

#4 楼 @Rei 没事,他是我朋友,说着玩着的

传说还有个 mongomapper,有人用过嘛?

wukong 可以处理基本的 mapreduce 太复杂的不好弄

@neverlandxy_naix mongid 适合做业务性比较强的,不太强的 api 场景用 mongodb 的原生驱动做有更好的性能,毕竟 mongoid 在现在这个版本还没提供连接池的能力,做 api 的话没有连接池,没有 EM,差距还是很大的

#9 楼 @killyfreedom 你说的对,还有 ORM 层的性能也是个问题。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号