Window 環境安裝MongoDB
- 下載安裝 Mongodb
- 設置MongoDB 爲wondows服務項( 配置環境變量 d:/MongoDB/bin) wind + R cmd.exe
- 啓動MongoDB
mongod --logpath d:/server/mongo/logs/logs.txt --logappend --dbpath d:/server/mongo/data --directoryperdb --serviceName MongoDB -install
參數說明
* –logpath 日誌文件地址
* –logappend 添加日誌的方式爲追加
* –dbpath 指定MongoDB數據存放的路徑
* –directoryperdb MongoDB按照數據庫的不同,針對每一個數據庫都建立一個目錄,所謂的“目錄每數據庫
* –auth 是否使用用戶驗證
* –serviceName 安裝Windows服務時使用的服務名
* –install 安裝MongoDB服務
4. 啓動MongoDB服務 net start MongoDB
5. 關閉MongoDB服務 net stop MongoDB
6. 使用MongoDB 需要先啓動MongoDB 然後 mongo
添加用戶和角色
- 添加用戶使用db.createUser( user , writeConcern ) 函數使用說明
/**
* @param object user 這個文檔創建關於用戶的身份認證和訪問信息
* @param mixed writeConcern 這個文檔描述保證MongoDB提供寫操作的成功報告。
*/
var user = {
"user": "root", // 用戶名
"pwd": "loveme", // 密碼
"customData": {employeeId: 12345}, // 用戶說明
"roles": [
{
role: "clusterAdmin",
db: "admin"
},
{
role: "readAnyDatabase",
db: "admin"
},
"readWrite"
] // 用戶角色
};
var write = {w: "majority", wtimeout: 5000};
db.createUser(user, write);
/*
Built-In Roles(內置角色):
1. 數據庫用戶角色:read、readWrite;
2. 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 集羣管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級用戶角色:root
// 這裏還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 內部角色:__system
PS:關於每個角色所擁有的操作權限可以點擊上面的內置角色鏈接查看詳情。
writeConcern文檔( 官方說明 )
w選項:允許的值分別是 1、0、大於1的值、"majority"、<tag set>.
j選項:確保mongod實例寫數據到磁盤上的journal(日誌),這可以確保mongd以外關閉不會丟失數據。設置true啓用.
wtimeout:指定一個時間限制,以毫秒爲單位。wtimeout只適用於w值大於1.
*/
登錄驗證
mongo -u root -p loveme --authenticationDatabase test;
db.auth("root", "loveme") ; // 驗證
刪除用戶
db.system.user.remove({"user": "root"});
MongoDB添加庫
// 選擇庫
use mydata
// 刪除庫
db.dropDatabase();
MongoDB添加表
// 添加表
db.createCollection("collection_name");
// 刪除表
db.collection_name.drop() ;
MongoDB 數據庫操作
新增數據 insert() 和 save()
// 新增數據時'_id' 不賦值默認自帶賦值
/**
* db.collection_name.insert() 添加數據
* @param object objNew 新增數據
*/
db.user.insert({"_id": 1, "name": "lovemeljx"});
/**
* db.collection_name.save( objNew )
* 新增數據(_id存在不新增)
* @param object objNew 更新的對象
*/
db.td_user.save({"name": "123", "username": "ljx"});
查詢 find()
db.collection_name.find() ;
// 查詢所有 SQL: SELECT * FROM `user` ;
db.user.find() ;
- 指定返回指定的列 ( 鍵 )
SQL:SELECT `name`,`age` FROM `user` ;
db.user.find({}, {"name": 1, "age": 1}) ;
/* 補充說明:第一個{} 放where條件 第二個{} 指定那些列顯示和不顯示( 0 不顯示 1 顯示) */
- WHERE 條件
SQL: SELECT `name`,`age` FROM `user` WHERE `name`='123' ;
db.user.find({"name": "123"}, {"name": 1, "age": 1});
- 使用 AND
SQL: SELECT * FROM `user` WHERE `name`='123' AND `age`=21 ;
db.user.find({"name": "123", "age": 21});
- 使用 OR( $or )
SQL: SELECT * FROM `user` WHERE `name`='123' OR `age`=21 ;
db.user.find({"$or": [{"name": "123"}, {"age": 18}}]});
- 使用 < <= > >= !=(
lt, lte ,gt, gte , $ne )
SQL: SELECT * FROM `user` WHERE `id`>1 AND `id`<=3 ;
db.user.find({"_id": {"$gt": 1, "$lte": 3}}) ;
- 使用 IN NOT IN (
in, nin )
SQL: SELECT * FROM `user` WHERE `id` IN (1,3,5) ;
db.user.find({"_id": {"$in": [1, 2, 5]}});
- 匹配 null
SQL: SELECT * FROM `user` WHERE `name` IS NULL ;
db.user.find({"name": null});
- LIKE模糊查詢
SQL: SELECT * FROM `user` WHERE `name` LIKE '%123%';
db.user.find({"name": /123/});
- 去掉重複的數據 DISTINCT
SQL: SELECT DISTINCT(`name`) FROM `user`;
db.user.distinct("name");
- 統計查詢 COUNT
SQL: SELECT COUNT(*) FROM `user`;
/**
* 查詢統計條件可以傳參數
* db.user.count({"name": "123"});
* db.find({"name": "123"}).count();
*/
db.user.count() ;
- 判斷一個元素是否存在 $exists
db.td_user.find({"username": {"$exists": true}});
- 取反 $not
db.td_user.find({"username": {"$not": /123/}});
- sort()排序條件
// 1 正序 -1 倒序
db.user.find().sort({"_id": -1});
- 查詢條數limit();
db.user.find().limit(10);
- 查詢5-10間的數據
db.user.find().limit(5).skip(5);
16.數組查詢(MongoDB特有)
/**
* skills = ["java", "php", "javascript", "python"] ;
*/
// 找到skills
db.user.find({"skills": "php"});
// $all ** 必須同時包含
db.user.find({"skills": {"$all": ["java", "php"]}});
// $size ** 數組長度等於
db.user.find({"skills": {"$size": 2}});
// $slice **
db.user.find({"skills": {"$slice": [1, 1]}});
修改 update() AND save()
/**
* db.collection_name.update(criteria, objNew, upsert, multi)
* @param object criteria 查詢條件對象
* @param object objNew 更新的操作
* @param boolean upsert 不存在是否添加
* @param boolean multi 是否全部跟新
*/
db.user.update(criteria, objNew, upsert, multi)
- 修改一條數據
db.td_user.update({"username": "123"}, {$set: {"username": 456}});
- 全部修改
db.td_user.update({"user": "test"}, {$set: {"name": "my-test"}}, false, true);
- 不存在添加一條
db.td_user.update({"user": "my-test"}, {$set: {"user": "test"}}, true, false);
- 添加所有
db.td_user.update({"user": "my-test"}, {$set: {"user": "test"}}, true, true);
- 全更新了
db.td_user.update({"count": {$gt: 15}}, {$inc: {"count": 1}}, false, true);
- 只更新了第一條
db.td_user.update({"count": {$gt: 10}}, {$inc: {"count": 1}}, false, false);
跟新說明
- $inc 一個數字字段field增加value(數字)
db.td_user.update({"username": "love"}, {$inc: {"age": 2}});
- $set 修改值(所有值都支持)
db.td_user.update({"username": "loveme"}, {$set: {"username": "mylove"}});
- $unset 刪除字段
db.td_user.update({"username": "mylove"}, {$unset: {"age": 1}});
- $push 將值追加到數組中
db.td_user.update({"username": "mylove"}, {$push: {"age": 23}});
刪除和修改數據 remove() AND findAndModify() AND runCommand()
- remove
/**
* remove( criteria )
* @param object criteria 查詢刪除的對象
*/
db.user.remove({"_id": 0});
- findAndModify
/**
* findAndModify( objNew ) objNew.remove 和 objNew.update 不能同時存在 runCommand()同
* @param objNew.query 查詢對象
* @param objNew.sort 排序條件
* @param objNew.update 修改的數據
* @param objNew.remove 是否刪除數據
*/
db.user.findAndModify({
query: {"_id": 1},
sort: {"_id": -1},
update: {$set: {"username": "loveme_user"}},
remove: false,
});