傳統資料庫中,我們要操作資料庫資料都要書寫大量的sql語句,而且在進行無規則資料的儲存時,傳統關係型資料庫建表時對不同欄位的處理也顯得有些乏力,mongo應運而生,而且ajax技術的廣泛應用,json格式的廣泛接受,也使得mongo更貼近開發人員。
mongo簡介及應用場景
MongoDB是一個以文件為導向的非關聯式資料庫(NoSQL),使用json格式儲存。 Mongo DB很好的實現了物件導向的想法(OO思想),在Mongo DB中 每一筆記錄都是一個Document物件。 Mongo DB最大的優點在於所有的資料持久操作都無需開發人員手動編寫SQL語句,直接呼叫方法就可以輕鬆的實作CRUD操作。
mongo能應用在以下場景:
存儲大尺寸、低價值的數據
json及對象類型數據
網站緩存數據
評論、子評論類有明顯從屬關係數據
多服務器數據,其內置的MapReduce很容易現實全域遍歷。
安裝和使用mongodb
我們在官網 https://www.mongodb.org/ 上可以下載到其最新穩定版本,mongo是官方已經編譯好的,解壓縮後即可使用其命令都在bin目錄下。
使用前首先配置mongo.conf檔案
port=xxxxx //代表端口号,如果不指定则默认为 27017 dbpath=/usr/local/mongodb/db //数据库路径 logpath=/usr/local/mongodb/logs/mongodb.log //日志路径 logappend=true //日志文件自动累加,而不是覆盖 fork=ture //以守护进程方式创建
資料庫和資料表都可以直接創建,即不用切換,直接使用,使用時即創建,mongo裡還可以直接寫js腳本,可直接運行,mongo中如果不指定_id字段,mongo會自動新增一個。
mongo的各種命令
mongo的命令是其精髓,這些十分複雜的命令集合在一塊,使得mongo的查詢變得絢麗而高效。 mongo內的每個表格稱為一個collection(集合),使用指令類似MySQL,切換到資料庫內直接對每個collection運算。其指令由方法(func())、查詢體(寫在{})和運算子(由$開頭)組成。
基本指令
show dbs //查看数据库 use dbname //切换到数据库 db.createCollection('collection') //创建数据表 db.collection.drop() //删除数据表 db.dropDatabase() //删数据库 db.collection.insert({data}) //插入数据 db.collection.find() //显示数据表内全部内容
查詢體
{key.attr.attr:value} //普通式 {key:{$ne|$gt|$gte|$lt|$lte|$in|$nin|$all:value}} //key满足 $oper value的值 {$or|$and|$not|$nor:[{key1:{$gt:value}},{key2:{$ne:value}}]} //用$oper同时限定key1,key2的条件 {key:{$mod{8,2}}} //取出key对8取余为2的值。 {key:{$exist:1}} //取出key列存在的值。 {key:{$type:String|Double|Array|Date|Object|Boolean|......}}//查询key类型为type的列 {key:{$regex:/pattern/}} //通过正则查询,效率较低 {$where:'this.attr.express.....'} //直接用where语句,二进制转为JS运算,较慢
find()方法增強
db.collection.find(query,{要取出的列:1,不需要的列:0}) db.collection.find(query).skip(跳过的行数).limit(限制信息条数); db.collection.find(query).explain() //与MYSQL的解释语句一样。 db.collection.remove(query,[justone]) //如不指定query,全部删除;[justone]默认为false意思是查询到多个,但只删一个。
update語句
db.collection.update(query,{key:newvalue}) //注意:新值会覆盖旧值,即数据只剩下语句中定义的key db.collection.update(query, { $set:{key:newvalue}, $unset:{key:value}, $rename:{key:value}, $inc:{key:value}, ...... }, { multi:true, //改变所有符合条件的,默认为false upsert:true //没有的话刚添加,默认为false } )
遊標
var cursorName=db.collection.fund(query,...)[.skip(num).limit(num)] //创建游标 cursorName.hasNext() //判断是否有下一个 printjson(cursorName.next()) //输出游标的下一个指向值 cursorName.forEach(function(Obj){process Obj}) //遍历操作游标使用它需要實現它的map和reduce兩個函數
db.collection.getIndexes() //查看索引 db.collection.ensureIndex({key:1/-1[,key.attr:1/-1]},{unique:1(是否唯一)},{sparse:1(是否非空)})// 添加正序/倒序索引 db.collection.dropIndex({key:1/2}) //删除索引 db.collection.reIndex() //重建用了很多出现杂乱的索引更多更詳細的命令可以在mongo的中文社區 http://docs.mongoing.com/manual-zh/ 找到。
mongo的使用者、資料匯入匯出和叢集
使用者管理
MongoDB預設不開啟授權。可以在開啟伺服器時新增 --auth 或 --keyFile 選項開啟授權。使用設定檔的話,使用 security.authorization 或 security.keyFile 設定。
db.runCommand( { mapReduce: collection, //要操作的数据表 map: function(){emit(key1,key2)}, //对key1和key2进行数据映射 reduce: function(key,value){}, //对key值和数据组value进行操作 out: <output>, query: <document>, sort: <document>, limit: <number>, finalize: <function>, scope: <document>, jsMode: <boolean>, verbose: <boolean> } )資料導入導出我們使用mongo自帶的工具進行導入導出,在mongo/bin目錄下,最好導出csv格式,方便資料交換。
use admin;(切换到admin数据库,对此库操作) db.createUser( { user: "username", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) use database; db.auth('username','passwd');用超级管理员用户登陆后,整个mongo数据库皆可存取。mongo資料庫叢集開啟mongod時新增選項--replSet replname;
在mongo客戶端連接上一個mongod進程,進入admin資料庫,然後宣告mongoconf變數:
use admin;
var 'replname',members[{_id:0,host:'xxx'},{_id:1,host:'xxy'}]};用rs.initiatee(rsconf);來初始化集群,mongo會自動將id號小的設為primary,其他的mongod進程為secondary。
PHP中操作mongo資料庫
我們先為php加入mongo擴充(方法可看linux下的PHP )。然後,我們便可以在腳本中使用mongo類別函式庫了。
Mongo類,基礎類,擁有連接、關閉連接、對全域資料庫的操作方法。
mongoDB類,郵Mongo類別透過selectDB()方法得到,擁有表格級的操作方法。
MongoCursor類,由MongoCollection透過find()方法得到,擁有普通的遊標遍歷作業。
以下是一個典型的mongo操作:./mongoexport -d dataname -c tablename -f key1,key2 -q 'query' -o ainname --csv//导出数据,默认为json格式 ./mongoimport -d dataname -c tablename --type json --file ./path //导入数据,默认为json格式
更多cdnoss PHP中安裝使用mongodb資料庫相關文章請關注PHP中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)