P2865 Roadblocks(嚴格次短路)
一、mongoDB + Node.js 的增刪改查
mongoDB下載地址 :https://www.mongodb.com/try/download/community
1、node.js依賴於第三方包 :mongoose操作mongoDB, 所以需要先下載 :npm install mongoose
2、需要先引入mongoose 第三方包 : const mongoose = require( ' mongoose ' ) ;
3、連線資料庫:
注:node的所有操作資料庫的方法,都返回Promise物件,如果連線的資料庫不存在,會在新增完資料後自動建立
1mongoose.connect('mongodb://localhost/ 資料庫名 ' ,
{ useNewUrlParser : true, useUnifiedTopology: true }) 2 .then(()=> console.log(' 資料庫連線成功 ')) 3 .catch(()=> console.log(' 資料庫連線失敗 '))
4、建立集合規則(集合相當於資料表), Schema是一個建構函式,在它的例項物件裡面填寫規則
例如建立一個使用者表的規則:
const userSchema = new mongoose.Schema({ name : String, age : Number, email : String, password : String, hobbies : [String] // hobbies 裡面存的是一個數組 })
5、建立集合,引數1是集合名(相當於表名),首字母必須大寫,但是在資料庫中顯示為users,引數2是規則,返回的是一個建構函式
1 const User = mongoose.model(' User ', userSchema);
6、向集合中新增文件(文件就是資料),用集合返回的建構函式的例項物件新增, 預設會新增id 為 _id
1 const user = new User({ 2 name: '丫丫' , 3 age : 37 , 4 hobbise : ['唱歌','跳舞','好看'], 5 email : "[email protected]" ,6 password: "yayaya" 7 })
7、新增的另一種寫法
1 User.create({ 2 name: '丫丫' , 3 age : 37 , 4 hobbise : ['唱歌','跳舞','好看'], 5 email : "[email protected]" , 6 password: "yayaya" 7 }) 8 .then(result=>console.log(result)) 9 .catch(err=>console.log(err))
8、查詢
(1)、查詢使用者集合中的所有文件,返回的是查詢到的資料
1 User.find().then(result=>console.log(result))
(2)、根據條件查詢資料
1 User.find({age: '20'}).then(result=>console.log(result))
(3)、條件查詢,只查詢一條資料
1 User.findOne({age: '20'}).then(result=>console.log(result))
(4)、查詢年齡大一20,小於50的資料
1 User.find({age: {$gt: '20', $lt: '50'}}).then(result=>console.log(result))
(5)、查詢愛好為打豆豆的資料,注:愛好是一個數組
1 User.find({hobbise: {$in: [' 打豆豆 ']}}).then(result=>console.log(result))
(6)、查詢某些指定欄位,查詢哪些欄位就寫進select中,用空格隔開,不想查詢哪些欄位,就在前面加-,如-_id,預設會查詢 _id
1 User.find().select(' name email -_id ').then(result=>console.log(result))
(7)、對查詢欄位進行升序,用sort(),降序只要在欄位前加上-
1 User.find().sort(' age ').then(result=>console.log(result)) // 對查詢到的欄位按年齡進行升序排列 2 3 User.find().sort(' -age ').then(result=>console.log(result)) // 對查詢到的欄位按年齡進行降序排列
(8)、查詢年齡是10,20,25的選項
1 User.find({age: {$in: [10, 20, 25]}}).then(result=>console.log(result))
(9)、skip跳過多少條資料,limit限制查詢多少條資料
1 User.find().skip(2).limit(2).then(result=>console.log(then))
// 查詢到的資料跳過前兩條,剩下的結果中只查詢頭兩條
9、刪除
(1)、查詢到一條文件並且刪除,返回刪除的文件,如果查詢匹配到多個文件,那麼將刪除第一條文件
1 User.findOneAndDelete({_id: '5c09f2d9aeb04b22f846096b'}).then(result=>console.log(result));
(2)、刪除多條文件,返回值是一個物件{n:(刪除多少條文件),ok:1,deletedCount:(刪除的總數)}
1 User.deleteMany({_id: '5c09f267aeb04b22f8460968'}).then(result=>console.log(result));
10、更新
(1)、更新集合中的文件(更新一個),第一個引數是查詢條件,第二個引數是修改的值,返回:{n:1,nModified:1,ok:1}
1 User.updateOne({name: '李四'}, {age: '30'}).then(result=>console.log(result));
(2)、更新集合中的文件(更新多個),第一個引數不寫表示選擇全部
1 User.updateMany({}, {age: '50'}).then(result=>console.log(result));