當同一個變數被連續插入兩次會出現id相同的異常,但是同樣內容的兩個變數同時插入不會有問題,可能是同一個變數同一個地址生成id相同,導致異常。 預設登陸不需要用戶名密碼認證,需要密碼認證登陸需要在admin資料庫user集合添加用戶,並且以需要認證的方式啟動,mongodb --auth,如果初始沒有 ...
當同一個變數被連續插入兩次會出現id相同的異常,但是同樣內容的兩個變數同時插入不會有問題,可能是同一個變數同一個地址生成id相同,導致異常。
預設登陸不需要用戶名密碼認證,需要密碼認證登陸需要在admin資料庫user集合添加用戶,並且以需要認證的方式啟動,mongodb --auth,如果初始沒有添加用戶以該方式啟動依然可以隨意登陸,因為如果不這樣就會無法登陸。
添加超級用戶後直接訪問別的數據(mongo dbbaes),依然無法訪問,超級用戶可以登錄admin後再訪問別的任何資料庫,而無法直接訪問別的資料庫,可以用超級用戶給其他資料庫添加用戶,方式一樣,需要先進入對應資料庫。
每條記錄會有一個主鍵_id,可以自己設置可以預設系統的,不能重覆。
程式插入記錄時,同一個對象如果被同一次內插入了兩次,則會報錯,主鍵重覆,但是內容可以重覆。
非認證方式啟動,用不用用戶名密碼都可以訪問,不能用錯的。
另外非正常情況下鏈接不報錯,但執行具體的操作就會報錯,具體原因沒有深查。
認證方式啟動必須用戶名密碼登陸。
mongodb在某個不正當操作下會導致操作某個集合報 SyntaxError: Unexpected token ILLEGAL 的錯誤,無論查詢刪除皆是如此,但是用js代碼的方式可以解決; 例如 var c =db.getCollection(‘player’);c.drop();
mongodb設計模式:
優先考慮內嵌:比如一個人有幾個手機號,這種對應數據少的情況下用內嵌足以;比如一個人有幾個手機號,這種對應數據少的情況下用內嵌足以;
後考慮引用:但是如果是一個明星對應幾萬條留言,則考慮引用,因為內嵌在一個文檔里會超過16M限制。這個時候你可以考慮使用引用的方式,在主表裡存儲一個id值,指向另一個表中的 id 值。
使用引用要註意的就是:從性能上講,一般我們可能需要兩次以上才能把需要的數據取回來。更加重要的是:需要把數據存放到兩個集合里,但是目前為止MongoDB並不支持跨表的事務性,所以對於強事務的應用場景要謹慎使用。
mongodb索引:
mongodb有一個TTL索引,定義在date類型或者數組中有date類型的單欄位上,可以用來刪除過期數據。
mongodb集合添加一個欄位 db.000001_DAY.update({}, {$set: {sid: 4}}, {multi: 1})
linux安裝mongodb
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 下載
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz 解壓
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb 移動到指定目錄
export PATH=/data/mongodb/mongodb-linux-x86_64-3.0.6/bin:$PATH 添加path路徑
mkdir -p /data/db 創建mongodb預設的啟動資料庫路徑
資料庫用戶角色:read、readWrite;
資料庫管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
備份恢復角色:backup、restore;
所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超級用戶角色:root
// 這裡還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
內部角色:__system