由於之前沒有接觸過mongodb,最近在學習時遇到了一些問題。用yml配置mongodb如下:
1 spring: 2 application: 3 name:xc-service-manage-cms 4 data: 5 mongodb: 6 uri: mongodb://xuecheng:123456@127.0.0.1:27017/xc_cms
mongodb在安裝完成后是無需驗證登錄的,在開啟用戶驗證登錄后,需要輸入用戶名密碼和庫名才能登錄。用測試類測試findAll方法時一直顯示timeout,打開mangodb數據庫進入admin庫查詢用戶:
發現user底下多了一個db鍵值對,我在創建用戶時並沒有輸入該參數,於是用db.updateUser修改admin值為xc_cms,報錯顯示無法修改該值,將uri后的庫名改為admin,再次測試,這次能夠連接了但是無法獲得數據,用studio3T打開庫發現該用戶下有兩個庫admin和xc_cms,由此得知該用戶是建在admin庫中的,uri對應兩個庫當然無法獲得數據。刪除該用戶后,use xc_cms庫再次執行創建用戶語句,查詢:
在xc_cms庫中成功創建角色,並且權限也只有該數據庫,再次連接studio3T打開數據庫發現,只有一個數據庫xc_cms,再試測試findAll方法成功獲取數據。
總結:
在mongodb中crud時,一定要在對應的庫中創建角色,這樣該角色才能只對應一個庫,才能指定collection獲得數據,如果在use admin的條件下創建該角色,則該角色也會有admin庫,程序無法判別從哪個庫中獲得數據,uri后面填的並不是對應的庫名,而是創建該角色時所在的庫名,也就是一開始多出來的那個key為db的值。