(1)連接資料庫時報錯 錯誤原因是和轉義字元有關。連接字元串使用的URL格式,所以其中的密碼中的% 需要轉義。 知識擴展: 連接mongo使用URI有特殊字元 '@' 或者":"或者‘%’, 連接會報錯,需要進行轉義。 解決方法: 把 @ 換成 %40 把 : 換成 %3A 把 % 換成 %25 ( ...
(1)連接資料庫時報錯
ERROR Topshelf.Hosts.ConsoleRunHost.Run 1 An exception occurred System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector
錯誤原因是和轉義字元有關。連接字元串使用的URL格式,所以其中的密碼中的% 需要轉義。
知識擴展:
連接mongo使用URI有特殊字元 '@' 或者":"或者‘%’, 連接會報錯,需要進行轉義。
解決方法:
把 @ 換成 %40
把 : 換成 %3A
把 % 換成 %25
(2)時間欄位的範圍查詢,請註意時間欄位的類型。
例如,明看到集合中指定時間段內有數據,但是Count結果還是顯示為0。
最早的一筆數據是20170816,但是使用以下語句查詢2017-08-14 到 2018-08-18時間段內的文檔數據為0.
問題在哪兒哪?
查看發現query.time欄位類型是 string.
我們將查詢語句的條件格式轉換為欄位的存儲格式,就OK了。
所以,在設計集合模式時,要特別註意存儲日期時間的欄位的類型,建議為Date。另外,查詢時也要小心,防止數據異常。
(3)副本集添加節點時報錯
錯誤信息:
{ "ok" : 0, "errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: 172.XXX.XXX.XXX:27017; the following nodes did not respond affirmatively: 172.XXX.XXX.XX:27017 failed with No route to host", "code" : 74, "codeName" : "NodeNotFound" }
錯誤原因是:防火牆沒關閉 導致
(4)將常規集合設置為固定集合,既有的索引丟失,需要重建。
db.runCommand({"convertToCapped": "集合名字", size: XXXXXX,"max":XXXXX});
設置為固定集合後,原來的索引都丟失了,需要謹記 。
(曾經的一個轉換性能測試,及轉為固定集合的耗時:1001 W數據,16.8 G 約耗時 6分鐘)
(5)mongodb 對欄位中有超過 1024 位元組的不會建立索引
MongoDB will not create an index on a collection if the index entry for an existing document exceeds the index key limit (1024 bytes). You can however create a hashed index or text index instead:
除了上面的介紹外,還可以修改啟動配置參數 ailIndexKeyTooLong。
(6)配置分片的複製集需,在啟動的配置文件中需 指定 shardsvr參數。否則,在啟動資料庫分片時報錯。
錯誤信息如下:
在config文件中,添加 shardsvr=true 即可。
重啟服務,再次啟動啟動分片,執行OK.
附註:
MongoDB是一種非關係型資料庫(NoSql),很好的實現了面向對象的思想(OO思想),在Mongo DB中 每一條記錄都是一個Document對象。Mongo DB最大的優勢在於所有的數據持久操作都無需開發人員手動編寫SQL語句,直接調用方法就可以輕鬆的實現CRUD操作。