【MongoDB學習之二】MongoDB數據庫、文檔、集合、元數據


環境
  MongoDB 4.0
  CentOS6.5_x64

一、連接
語法格式:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

參考:MongoDB 連接

二、數據庫

1、show dbs:命令可以顯示所有數據的列表
2、db:命令可以顯示當前數據庫對象或集合。
3、use:如果數據庫不存在,則創建數據庫,否則切換到指定數據庫。

4、db.dropDatabase() 刪除當前數據庫

[root@node102 bin]# ./mongo
...
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> db
test
> use admin
switched to db admin
> db
admin
> use wjy
switched to db wjy
> db
wjy

保留數據庫:

admin: 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器。
local: 這個數據永遠不會被復制,可以用來存儲限於本地單台服務器的任意集合
config: 當Mongo用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息。

 

三、集合

1、查詢當前數據庫中所有的集合(表) 

show collections 

2、顯式創建collection: 

db.createCollection(‘collectionName’) 

3、隱式創建collection(插入數據前創建): 

db.collectionName.insert(document); 

4、刪除collection: 

db.collectionName.drop() , 

5、統計Collection中文檔數量: 

db.collectionName.count();

> use test
switched to db test
> db
test
> show collections
> db.createCollection('cols')
{ "ok" : 1 }
> show collections
cols
> db.cols.insert({title: 'MongoDB 教程', 
...     description: 'MongoDB 是一個 Nosql 數據庫',
...     by: 'w3cschool',
...     url: 'http://www.w3cschool.cn',
...     tags: ['mongodb', 'database', 'NoSQL'],
...     likes: 100
... })
WriteResult({ "nInserted" : 1 })
> db.cols.count()
1
> db.cols.drop()
true
> show collections
>

 

四、文檔

1、新增

(1)增加單個文檔。

> db.user.insert({name:"will",age:17});
WriteResult({ "nInserted" : 1 })
> show collections
user

(2)增加單個文檔,並指定_id。 

 

> db.user.insert({_id:22,name:"will",age:17,gender:"boy",email:"will@itsource.cn"});
WriteResult({ "nInserted" : 1 })

(3)增加多個文檔。

> db.user.insert([
... {name:"張三",age:17},
... {name:"李四",age:18},
... {name:"王五",age:19}
... ])
BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 3,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
})
> db.user.count()
5
>

注意:db.col.save(document) 命令。如果不指定 _id 字段 save() 方法類似於 insert() 方法。如果指定 _id 字段,則會更新該 _id 的數據

 

2、更新操作

語法: 

db.collection.update(
   <criteria>,
   <objNew>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

 

criteria : update的查詢條件,類似sql update查詢內where后面的。

objNew : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的

upsert : 這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。

multi : mongodb默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新 

writeConcern :可選,拋出異常的級別。

 

(1)只更新第一條記錄:

db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

(2)全部更新:

db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

(3)只添加第一條:

db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

(4)全部添加進去:

db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

 

3、刪除操作

語法: 

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

query :(可選)刪除的文檔的條件。

justOne : (可選)如果設為 true 或 1,則只刪除一個文檔,如果不設置該參數,或使用默認值 false,則刪除所有匹配條件的文檔。

writeConcern :(可選)拋出異常的級別。

(1)刪除user集合中_id屬性值為9527的文檔 。

db.user.remove({_id:9527}); 

(2)刪除user集合中gender屬性為boy的文檔(默認刪除多條數據)。

db.user.remove({gender:"boy"}); 

(4)刪除user集合中gender屬性為girl的文檔,只刪除1行。

db.user.remove({gender:"boy"},true);

(4)清空所有,類似truncate

db.user.remove({})

 

4、查詢操作

語法: 

db.collection.find(query, projection)

query :可選,使用查詢操作符指定查詢條件

projection :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)。

db.col.find().pretty():pretty() 方法以格式化的方式來顯示所有文檔。

(1)查詢所有user集合中文檔的數據。 

db.user.find();

(2)查詢user集合中所有的gender屬性 (_id屬性默認總是查出來)。 

db.user.find({},{gender:true});

(3)查詢user集合中所有的gender屬性,且不查詢_id屬性。 

db.user.find({},{_id:false,gender:true});

(4)查詢user集合中所有gender屬性值為boy的文檔中的name屬性。 

db.user.find({gender:"boy"},{_id:false,name:true});

(5)查詢user集合中所有gender屬性值為boy並且年齡大於等於17的文檔中的name屬性。

db.user.find({gender:"boy",age:{$gte:17}},{_id:false,name:true,age:true});

官方最新版本增刪改查操作文檔

 

五、元數據

1、系統的命名空間
數據庫的信息是存儲在集合中。它們使用了系統的命名空間:dbname.system.*
在MongoDB數據庫中名字空間 <dbname>.system.* 是包含多種系統信息的特殊集合(Collection),如下:
集合命名空間 描述
dbname.system.namespaces 列出所有名字空間。
dbname.system.indexes 列出所有索引。
dbname.system.profile 包含數據庫概要(profile)信息。
dbname.system.users 列出所有可訪問數據庫的用戶。
dbname.local.sources 包含復制對端(slave)的服務器信息和狀態。
對於修改系統集合中的對象有如下限制。
在{{system.indexes}}插入數據,可以創建索引。但除此之外該表信息是不可變的(特殊的drop index命令將自動更新相關信息)。
{{system.users}}是可修改的。 {{system.profile}}是可刪除的。

2、MongoDB 數據類型
String 字符串。存儲數據常用的數據類型。在 MongoDB 中,UTF-8 編碼的字符串才是合法的。
Integer 整型數值。用於存儲數值。根據你所采用的服務器,可分為 32 位或 64 位。
Boolean 布爾值。用於存儲布爾值(真/假)。
Double 雙精度浮點值。用於存儲浮點值。
Min/Max keys 將一個值與 BSON(二進制的 JSON)元素的最低值和最高值相對比。
Array 用於將數組或列表或多個值存儲為一個鍵。
Timestamp 時間戳。記錄文檔修改或添加的具體時間。
Object 用於內嵌文檔。
Null 用於創建空值。
Symbol 符號。該數據類型基本上等同於字符串類型,但不同的是,它一般用於采用特殊符號類型的語言。
Date 日期時間。用 UNIX 時間格式來存儲當前日期或時間。你可以指定自己的日期時間:創建 Date 對象,傳入年月日信息。
Object ID 對象 ID。用於創建文檔的 ID。
Binary Data 二進制數據。用於存儲二進制數據。
Code 代碼類型。用於在文檔中存儲 JavaScript 代碼。
Regular expression 正則表達式類型。用於存儲正則表達式。

 

六、MongoDB客戶端工具-MongoVUE

MongoVUE下載

MongoVUE使用

其他常用的MongoDB客戶端管理工具

清單一

清單二

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM