{ "firstName":"John" , "lastName":"Doe" }
JSON 數組在方括號中書寫:
數組可包含多個對象:
{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }
在上面的例子中,對象 "employees" 是包含三個對象的數組。每個對象代表一條關於某人(有姓和名)的記錄。
1、安裝配置
2、創建用戶
3、與Mql對照
MySQL |
MongoDB |
說明 |
mysqld |
mongod |
服務器守護進程 |
mysql |
mongo |
客戶端工具 |
mysqldump |
mongodump |
邏輯備份工具 |
mysql |
mongorestore |
邏輯恢復工具 |
|
db.repairDatabase() |
修復數據庫 |
mysqldump |
mongoexport |
數據導出工具 |
source |
mongoimport |
數據導入工具 |
grant * privileges on *.* to … |
Db.addUser()【老版本】 Db.auth() |
新建用戶並權限 |
show databases |
show dbs |
顯示庫列表 |
Show tables |
Show collections |
顯示表列表 |
Show slave status |
Rs.status |
查詢主從狀態 |
Create table users(a int, b int) |
db.createCollection("mycoll", {capped:true, size:100000}) 另:可隱式創建表。 |
創建表 |
Create INDEX idxname ON users(name) |
db.users.ensureIndex({name:1}) |
創建索引 |
Create INDEX idxname ON users(name,ts DESC) |
db.users.ensureIndex({name:1,ts:-1}) |
創建索引 |
Insert into users values(1, 1) |
db.users.insert({a:1, b:1}) |
插入記錄 |
Select a, b from users |
db.users.find({},{a:1, b:1}) |
查詢表 |
Select * from users |
db.users.find() |
查詢表 |
Select * from users where age=33 |
db.users.find({age:33}) |
條件查詢 |
Select a, b from users where age=33 |
db.users.find({age:33},{a:1, b:1}) |
條件查詢 |
select * from users where age<33 |
db.users.find({'age':{$lt:33}}) |
條件查詢 |
select * from users where age>33 and age<=40 |
db.users.find({'age':{$gt:33,$lte:40}}) |
條件查詢 |
select * from users where a=1 and b='q' |
db.users.find({a:1,b:'q'}) |
條件查詢 |
select * from users where a=1 or b=2 |
db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } ) |
條件查詢 |
select * from users limit 1 |
db.users.findOne() |
條件查詢 |
select * from users where name like "%Joe%" |
db.users.find({name:/Joe/}) |
模糊查詢 |
select * from users where name like "Joe%" |
db.users.find({name:/^Joe/}) |
模糊查詢 |
select count(1) from users |
Db.users.count() |
獲取表記錄數 |
select count(1) from users where age>30 |
db.users.find({age: {'$gt': 30}}).count() |
獲取表記錄數 |
select DISTINCT last_name from users |
db.users.distinct('last_name') |
去掉重復值 |
select * from users ORDER BY name |
db.users.find().sort({name:-1}) |
排序 |
select * from users ORDER BY name DESC |
db.users.find().sort({name:-1}) |
排序 |
EXPLAIN select * from users where z=3 |
db.users.find({z:3}).explain() |
獲取存儲路徑 |
update users set a=1 where b='q' |
db.users.update({b:'q'}, {$set:{a:1}}, false, true) |
更新記錄 |
update users set a=a+2 where b='q' |
db.users.update({b:'q'}, {$inc:{a:2}}, false, true) |
更新記錄 |
delete from users where z="abc" |
db.users.remove({z:'abc'}) |
刪除記錄 |
|
db. users.remove() |
刪除所有的記錄 |
drop database IF EXISTS test; |
use test db.dropDatabase() |
刪除數據庫 |
drop table IF EXISTS test; |
db.mytable.drop() |
刪除表/collection |
|
db.addUser(‘test’, ’test’) |
添加用戶 readOnly-->false |
|
db.addUser(‘test’, ’test’, true) |
添加用戶 readOnly-->true |
|
db.addUser("test","test222") |
更改密碼 |
|
db.system.users.remove({user:"test"}) 或者db.removeUser('test') |
刪除用戶 |
|
use admin |
超級用戶 |
|
db.auth(‘test’, ‘test’) |
用戶授權 |
|
db.system.users.find() |
查看用戶列表 |
|
show users |
查看所有用戶 |
|
db.printCollectionStats() |
查看各collection的狀態 |
|
db.printReplicationInfo() |
查看主從復制狀態 |
|
show profile |
查看profiling |
|
db.copyDatabase('mail_addr','mail_addr_tmp') |
拷貝數據庫 |
|
db.users.dataSize() |
查看collection數據的大小 |
|
db. users.totalIndexSize() |
查詢索引的大小 |
4.插入數據
db.table.insert(....)
5.update更新數據
db.collection.update(<query>, <update>,{ upsert:<boolean>, multi:<boolean>, writeConcern:<document>})
參數說明:
- query : update的查詢條件,類似sql update查詢內where后面的。
- update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的
- upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。
- multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
- writeConcern :可選,拋出異常的級別。
db.collection.save(<document>,{ writeConcern:<document>})
db.col.save({"_id":ObjectId("56064f89ade2f21f36b03136"),"title":"MongoDB","description":"MongoDB 是一個 Nosql 數據庫","by":"Runoob","url":"http://www.runoob.com","tags":["mongodb","NoSQL"],"likes":110})7.刪除數據
db.collection.remove(<query>,<justOne> //設置刪除的條數,沒有就是全部)2.6版本后
db.collection.remove(<query>,{ justOne:<boolean>, writeConcern:<document>})
參數說明:
- query :(可選)刪除的文檔的條件。
- justOne : (可選)如果設為 true 或 1,則只刪除一個文檔。
- writeConcern :(可選)拋出異常的級別。
db.col.find().pretty()格式化顯示數據
db.col.findOne().pretty()只顯示一條
Conditional Operators : $lt <, $lte <=, $gt >, $gte >=
Conditional Operator : $ne //不等於
Conditional Operator : $in //屬於
Conditional Operator : $nin //不屬於
Conditional Operator : $mod //取模運算
Conditional Operator: $all //全部屬於
Conditional Operator : $size //數量
Conditional Operator: $exists //字段存在
Conditional Operator: $type //字段類型
Conditional Operator: $or // 或
Regular Expressions //正則表達式
Value in an Array // 數組中的值
Conditional Operator: $elemMatch //要素符合
Value in an Embedded Object //內嵌對象中的值
Meta operator: $not //不是
Javascript Expressions and $where //
sort() //排序
limit() //限制取數據條數
skip() //跳過一定數值開始取
snapshot() //
count() // 數量
group() //分組
db.col.find({"by":"菜鳥教程","title":"MongoDB 教程"}).pretty()WHERE by='菜鳥教程' AND title='MongoDB 教程'
db.col.find({$or:[{"by":"菜鳥教程"},{"title":"MongoDB 教程"}]}).pretty()WHERE by='菜鳥教程' or title='MongoDB 教程'
db.col.find({"likes":{$gt:50}, $or:[{"by":"菜鳥教程"},{"title":"MongoDB 教程"}]}).pretty()'where likes>50 AND (by = '菜鳥教程' OR title = 'MongoDB 教程')'
db.col.find({likes :{$lt :200, $gt :100}})
Select*from col where likes>100 AND likes<200;
查找age除10模等於1的
取name元素數和$size數相同的信息
table.find({"name":{"$exists": True}}
取name存在的信息
table.find({"name":{"$type": 2}}
name類型為字符串的
type對應該類型表如下:
table.find({"name": {"$regex": r".*ee.*"}})
table.find({"info.name": "abeen"})
查找內部對象info的name等於abeen的信息
$query - 查詢類似於sql中的 where
$orderby - 排序{x:1},1為升序 -1為降序
9.創建索引
一、基礎
1.文檔
null
|
{"x":null}
|
布爾
|
{"x":true}
|
32位整數
|
shell中這個類型不可用,在js中僅支持64位浮點數,所以32位整數會被自動轉換
|
64位整數
|
shell也不支持這個類型,shell會使用一個特殊的內嵌文檔來顯示64位整數。
|
64位浮點數
|
{"x":3.14},{"x":3}這個也是浮點數。shell中的數字都是這種類型的。
|
字符串
|
{"x":"xxxx"}
|
符號
|
shell中也不支持這種類型,會把此轉換成字符串
|
對象id
|
{"x":objectId()}
|
日期
|
{"x":new Date()}
|
正則表達式
|
{"x": /foobar/iU}
|
代碼
|
{"x": function(){ alert('a')}}
|
二進制數據 |
二進制數據可以由任意字節的串組成,不過shell中無法使用
|
最大值
|
bson包括一個特殊類型,表示可能的最大值
|
最小值
|
bson包括一個特殊類型,表示可能的最小值 |
未定義
|
{"x":undefined}
|
數組 |
{"x":["a","b"]}
|
內嵌別的文檔 |
{"x":{"foo":"bar"}}
|
5.修改
定位符 $



db.runCommand(