日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mongodb ruby driver API(中文)

發布時間:2024/4/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mongodb ruby driver API(中文) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

1.?開始 1.1?使用gem 通過kernel方法使用mongo?gem require?'rubygems'????#ruby1.9以上版本不需要 require?'mongo' include?Mongo模塊使得Mongo類一直可見而不用指定Mongo命名空間。 1.2?創建一個連接 一個MongoClient呈現一個MongoDB的連接 mongo_client?=?MongoClient.new("localhost",?27017) 這個驅動在每次寫操作后都會發送一個getlasterror命令來確保寫成功。1.8版本以前是沒有指定?':safe?=>?true'來實現寫保護的。 可以選定mongodb的地址和端口號來連接實例: mongo_client?=?MongoClient.new?#?(optional?host/port?args) mongo_client?=?MongoClient.new("localhost") mongo_client?=?MongoClient.new("localhost",?27017) 1.3?列出所有的數據庫 mongo_client.database_names?????#?lists?all?database?names mongo_client.database_info.each?{?|info|?puts?info.inspect?} database_info返回一個數據庫名和數據大小的哈希映射。2.?使用數據庫 可以使用Mongo::MongoClient實例來獲取Mongo::DB實例(返回數據庫名稱)。數據庫可以不存在,如果不存在,Mongodb會創建它。 db?=?mongo_client.db("mydb") db?=?MongoClient.new("localhost",?27017).db("mydb") 此時,db對象將會連接mongodb服務器指定數據庫,每個數據庫實例使用服務器一個不同的套接字。 2.1?認證 mongodb可以通過使用用戶名和密碼工作在一個安全模式。 當工作在這個模式下,客戶端需要提供一個用戶名和密碼完成連接,否則將會報錯。 2.2?使用一個集合 可以連接一個集合通過collection方法: coll?=?db.collection("testCollection") 這和[]方法一樣: coll?=?db["testCollection"] 一旦獲取集合對象,就可以在上面做create,?read,?update,?and?delete?(CRUD)?等操作。 2.3?利用insert創建一個集合 一旦獲取collection對象,就可以向集合創建或插入文檔,文檔格式是JSON格式的。 {"name"?:?"MongoDB","type"?:?"database","count"?:?1,"info"?:?{x?:?203,y?:?102} } 上面的文檔有內嵌數據,要實現這個,需要使用哈希或者有序哈希來完成。 doc?=?{"name"?=>?"MongoDB",?"type"?=>?"database",?"count"?=>?1,?"info"?=>?{"x"?=>?203,?"y"?=>?'102'}} id?=?coll.insert(doc) 返回結果: =>?BSON::ObjectId('5358775858e53d20b0000001') 2.4?獲取集合列表 每個數據有一個或多個集合。可以獲取他們呢的列表。 db.collection_names 返回結果: =>?["system.indexes",?"testData3",?"test"] 2.5?插入多個文檔 為了示范更多有趣的查詢,需要向集合添加多個文檔,文檔格式如下: {"i"?:?value } 100.times?{?|i|?coll.insert("i"?=>?i)?} 注意可以向同一集合插入格式不同的文檔,這就是mongodb的模式自由概念。3.?利用find和find_one讀取文檔 3.1?用find_one讀取集合中的一條文檔 獲取集合中的一條文檔記錄,適應findOne方法,這個方法返回一個文檔。 coll.find_one 返回結果: =>?{"_id"=>BSON::ObjectId('5358775858e53d20b0000001'),?"name"=>"MongoDB",?"type"=>"database",?"count"=>1,?"info"=>{"x"=>203,?"y"=>"102"}}_id元素是mongodb自動添加的。 3.2?利用find方法從一個游標讀取所有文檔 為了獲取集合所有文檔,可以使用find方法返回游標對象,可以允許迭代匹配到的結果文檔。 ruby驅動的游標是可列舉的,可以使用Enumerable#each,Enumerable#map等方法。例如: coll.find.each?{?|row|?puts?row.inspect?} 這樣可以返回集合中的101條文檔,也可以使用Enumerable#to_a。 puts?coll.find.to_a 也可以使用?#each_slice來獲取文檔塊以便成批處理。 #?retrieve?and?process?10?documents?at?a?time?from?cursor coll.find.each_slice(10)?do?|slice|puts?slice.inspect end 提示:to_s方法可以把所有結果寫入內存中,如果處理每個文檔是無效的。為了更加有效利用內存,使用each方法處理代碼塊來處理游標。 3.3?指定查詢 可以使用find一個哈希集合來查找滿足條件的文檔。 coll.find("_id"?=>?id).to_a 選定條件: coll.find("i"?=>?71).to_a 返回結果: =>?[{"_id"=>BSON::ObjectId('5358786a58e53d20b0000049'),?"i"=>71}] 3.4?排序集合中的文檔 排序文檔使用sort方法,這個方法可以利用一個key或者[key,?direction]對。 方向默認是升序的,由Mongo::ASCENDING,:ascending,或:asc指定,然而也可以使用降序,由Mongo::DESCENDING,:descending,或:desc來指定。 #?Sort?in?ascending?order?by?:i coll.find.sort(:i)#?Sort?in?descending?order?by?:i coll.find.sort(:i?=>?:desc) 二者都返回游標對象。 3.5?集合文檔數目統計 可以使用count方法 coll.count =>?101 3.6?得到一個查詢文檔的集合 如果查詢"i"?>?50的文檔: puts?coll.find("i"?=>?{"$gt"?=>?50}).to_a 如果查詢20?<?"i"?<=?30并且的文檔: puts?coll.find("i"?=>?{"$gt"?=>?20,?"$lte"?=>?30}).to_a 返回結果: {"_id"=>BSON::ObjectId('5358786958e53d20b0000017'),?"i"=>21} {"_id"=>BSON::ObjectId('5358786958e53d20b0000018'),?"i"=>22} {"_id"=>BSON::ObjectId('5358786958e53d20b0000019'),?"i"=>23} {"_id"=>BSON::ObjectId('5358786958e53d20b000001a'),?"i"=>24} {"_id"=>BSON::ObjectId('5358786958e53d20b000001b'),?"i"=>25} {"_id"=>BSON::ObjectId('5358786958e53d20b000001c'),?"i"=>26} {"_id"=>BSON::ObjectId('5358786958e53d20b000001d'),?"i"=>27} {"_id"=>BSON::ObjectId('5358786958e53d20b000001e'),?"i"=>28} {"_id"=>BSON::ObjectId('5358786958e53d20b000001f'),?"i"=>29} {"_id"=>BSON::ObjectId('5358786958e53d20b0000020'),?"i"=>30} =>?nil 3.7?返回查詢的映射域 使用:fields選項指定返回域。 puts?coll.find({"_id"?=>?id},?:fields?=>?["name",?"type"]).to_a puts?coll.find({"_id"?=>?"5358786958e53d20b0000017"},?:fields?=>?["i"]).to_a 3.8?使用正則表達式查詢 puts?coll.find({"name"?=>?/^M/}).to_a 也可以動態的構建一個正在表達式: params?=?{'search'?=>?'DB'} search_string?=?params['search']#?Constructor?syntax puts?coll.find({"name"?=>?Regexp.new(search_string)}).to_a#?Literal?syntax puts?coll.find({"name"?=>?/#{search_string}/}).to_a 盡管mongodb不會受到SQL注入攻擊,但是也需要檢查惡意的字符串。4.?更新文檔 可以使用很多update方法更新文檔。 doc["name"]?=?"MongoDB?Ruby" coll.update({"_id"?=>?id},?doc) 或者使用原子操作來改變一個單個值: coll.update({"_id"?=>?id},?{"$set"?=>?{"name"?=>?"MongoDB?Ruby"}}) 驗證更新: puts?coll.find("_id"?=>?id).to_a5.?刪除文檔 使用remove來刪除文檔。 coll.count coll.remove("i"?=>?71) coll.count puts?coll.find("i"?=>?71).to_a 上面的例子展示了總數減少,相關文檔查詢不到。 如果沒有參數,delete方法會刪除所有文檔: coll.remove coll.count 在程序中需要謹慎使用6.?索引 6.1?創建索引 mongodb支持索引,為了創建一個索引,你需要指定索引名稱和一組或一個域被索引: #?create_index?assumes?ascending?order;?see?method?docs #?for?details coll.create_index("i") 如果要指定復合索引或者縮減索引需要使用稍微復雜點的語法。索引指定必須是[filed?name,?direction]對。 方向應該指定為Mongo::ASCENDING?或?Mongo::DESCENDING。 #?Explicit?"ascending" coll.create_index([["i",?Mongo::ASCENDING]])?#?ruby?1.8 coll.create_index(:i?=>?Mongo::ASCENDING)?#?ruby?1.9?and?greater 使用游標上的explain方法來展示mongodb如何通過索引查找數據。 coll.find("_id"?=>?id).explain coll.find("i"?=>?71).explain coll.find("type"?=>?"database").explain 上面的通過_id和i的查詢會使用比較快的BtreeCursor,type查詢會使用比較慢的BasicCursor。 6.2?獲取集合的索引列表 coll.index_information 6.3?創建和查詢地理信息索引 首先在一個擁有long-lat值的域上創建一個索引: #?ruby?1.8 people.create_index([["loc",?Mongo::GEO2D]])#?ruby?1.9?and?greater people.create_index(:loc?=>?Mongo::GEO2D) 獲取最接近坐標50,50的20個位置: people.find({"loc"?=>?{"$near"?=>?[50,?50]}},?{:limit?=>?20}).each?do?|p|puts?p.inspect end7.?Dropping 7.1?刪除索引 刪除一個次級索引使用drop_index方法: coll.drop_index("i_1") coll.index_information 已經刪除的索引不會列出來。 7.2?刪除所有索引 coll.drop_indexes coll.index_information 只有主索引"_id"會保留。 7.2?刪除集合 coll.drop db.collection_names 也可以使用drop_collection方法代替: db.drop_collection("testCollection") 7.3?刪除數據庫 在mongo客戶端使用drop_databases來刪除數據庫: mongo_client.drop_database("mydb") mongo_client.database_names8.?數據庫管理 一個數據庫可以有下面三個級別中一個profiling級別: 關閉(:off),慢查詢(:slow_only),所有查詢(:all)。查看級別: puts?db.profiling_level???#?=>?off?(the?symbol?:off?printed?as?a?string) db.profiling_level?=?:slow_only 驗證數據庫會在一切正常或者因為問題而拋出異常產生一個有趣的哈希。 p?db.validate_collection('coll_name')


轉載于:https://my.oschina.net/u/1449160/blog/226026

總結

以上是生活随笔為你收集整理的Mongodb ruby driver API(中文)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。