軟件質量黃金法則
944
2025-04-03
Mongodb基礎入門教程
項目中使用的技術五花八門,接觸了很多新技術,之前也沒用過mongo,今天惡補一下基礎的知識,開始吧。
1、mongo 和 mysql 概念 對比
一個剛畢業的學生都知道mysql ,所以說關系型數據庫就像我們的母語一樣,在學習新的數據庫的時候進行知識遷移,先來類比一下mysql 的概念。
2、插入文檔
MongoDB 使用 insert() 或 save() 方法向集合中插入文檔
例子
db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個 Nosql 數據庫', by: '菜鳥教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
以上實例中 col 是我們的集合名,如果該集合不在該數據庫中, MongoDB 會自動創建該集合并插入文檔。
3、更新文檔
update() 方法用于更新已存在的文檔
save() 方法通過傳入的文檔來替換已有文檔,_id 主鍵存在就更新,不存在就插入
語法:
db.getCollection('test_data_1').updateMany( // 下面是查詢條件 {"字段名1":"查找條件1","字段名2":"查找條件2"}, // 進行修改 {"$set":{"字段名":"新的數據","字段名":"新的數據"} })
updateOne:只更新第一條符合條件的數據
updateMany:更新所有符合條件的數據
4、刪除文檔
例子:
db.getCollection('test_data_1').deleteMany( // 刪除的條件 {"字段名1":"值","字段名2":"值2"} )
deleteOne和deleteMany。和修改數據的情況差不多,一個是刪除第一條滿足條件的,一個是刪除所有滿足條件的。
5、查詢
MongoDB 查詢數據的語法格式如下:
db.collection.find(query, projection)
query :可選,使用查詢操作符指定查詢條件
projection :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)。
MongoDB 的 find() 方法可以傳入多個鍵(key),每個鍵(key)以逗號隔開,即常規 SQL 的 AND 條件
db.col.find({"by":"香菜聊游戲", "title":"MongoDB 教程"})
等價于:WHERE by='香菜聊游戲' AND title='MongoDB 教程'
MongoDB OR 條件語句使用了關鍵字 $or
db.col.find({$or:[{"by":"香菜聊游戲"},{"title": "MongoDB 教程"}]})
等價于:WHERE by='香菜聊游戲' or title='MongoDB 教程'
6、查詢排序
在 MongoDB 中使用 sort() 方法對數據進行排序,sort() 方法可以通過參數指定排序的字段,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用于降序排列。
例子 :
db.col.find({},{"title":1,_id:0}).sort({"likes":-1})
得到數據的條數
db.getCollection('test_data_1').find({}).count()
7、索引:
單個索引
db.col.createIndex({"title":1})
Key 值為你要創建的索引字段,1 為指定按升序創建索引,如果你想按降序來創建索引指定為 -1
復合索引:
db.col.createIndex({"title":1,"description":-1})
8、限制數量
db.col.find({},{"title":1,_id:0}).limit(2)
除了可以使用limit()方法來讀取指定數量的數據外,還可以使用skip()方法來跳過指定數量的數據,skip方法同樣接受一個數字參數作為跳過的記錄條數。
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
9、去重
在mongodb中進行數據去重是一個很簡單的操作。使用distinct即可。它可以接收兩個參數,第一個參數為需要被去重的字段名,第二個參數是進行去重的條件(去重條件也就是進行查詢操作的第一個參數,可以省略)。
db.getCollection('test_data_1').distinct(去重的字段名,去重的條件)
db.getCollection('test_data_1').distinct("name",{"age":{"$ne":10}})
最佳實踐
集合名全部小寫
禁止使用數字打頭的庫名
文檔中的 key 禁止使用任何 " _ "(下劃線)以外的特殊字符
盡量存放統一了大小寫后的數據
在創建集合時,規劃好索引,在集合為空的時候創建索引
索引的數量越少越好,
mongo不支持表連接
設定合適的MongoDB連接池大小,Java驅動的默認連接池大小是100
不要實例化多個MongoClient。MongoClient是個線程安全的類,自帶線程池。通常在一個JVM內不要實例化多個MongoClient實例,避免連接數過多和資源的不必要浪費
【綻放吧!數據庫】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/285617
MongoDB MySQL 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。