在上一篇我們講了如何通過Mongoose想資料庫動態添加資料, 接下來我們一起來看一下如何通過Mongoose來對資料庫進行增刪改查等一系列操作
Model 物件的方法
remove(cinditions,callback)deleteOne(conditons.callback)deleteMant(conditions,callback)find(conditions,projection,options,callback)findById(id,projection,options,callback)findOne(conditions,projection,options,callback)count(conditions,callback)create(doc,callback)update(conditions,doc,options,callback)- 等等
1. 前置代碼
// 引入mongoose模塊
const mongoose = require("mongoose");
// 連接資料庫
mongoose.connect("mongodb://localhost:27017/test",{useNewUrlParser: true ,useUnifiedTopology: true});
// 測驗是否連接成功
mongoose.connection.once("open", function () {
// 連接成功執行
console.log('連接成功~');
});
// 創建Schema物件, 賦值給一個變數
const Schema = mongoose.Schema;
// 創建Schema(模式)物件
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type:String,
default:'男'
},
address:String
});
// 通過Scheme來創建Model
// Model代表的是資料庫中的集合, 通過Model才能對資料庫進行操作
// mongoose.model(modelName,schema);
// modelName: 就是要映射的集合名稱, mongoose會自動將集合名變成復數
// schema: 創建的Schema物件
const stuModel = mongoose.model('student', stuSchema);
2. 查詢檔案
演示:
find(conditions,[projection],[options],[callback])- 查詢所有符合條件的檔案
stuModel.find({}, {name:1,_id:0}, function (err,docs) {
if (!err) {
console.log(docs)
}
})
運行結果:

{skip:3,limit:1}: 表示跳過三條資料, 顯示一條資料
stuModel.find({}, { name: 1, _id: 0 }, {skip:3,limit:1},function (err,docs) {
if (!err) {
console.log(docs)
}
})

findById(id,[projection],[options],[callback])- 根據檔案的_id屬性查詢檔案
stuModel.findById("611a9aa01647216accf385fa", function (err, docs) {
console.log(err)
if (!err) {
console.log(docs)
}
})

findOne(conditions,[projection],[options],[callback])- 查詢符合條件的第一個檔案
stuModel.findOne({}, { name: 1 },function (err,docs) {
if (!err) {
console.log(docs)
}
});

引數決議:
- conditions: 查詢條件
- projection: 投影
- 兩種方式,下面兩種方式所投影出來的效果是一樣的
{name:1,_id:0}"name -_id
- options: 查詢選項(
skip, limit) - callback: 回呼函式, 查詢結果會通過回呼函式回傳
**注意:**通過find() 查詢的結果, 回傳的物件, 就是Document 檔案物件
Document物件是Model的實體
驗證代碼如下:
stuModel.findById("611a9aa01647216accf385fa", function (err, docs) {
if (!err) {
console.log(docs instanceof stuModel)
}
})

3. 修改檔案
update(conditions,doc,[options],callback)updateMany(conditions,doc,[options],callback)updateOne(conditions,doc,[options],callback)replaceOne(conditions,doc,[options],callback)- 使用給定檔案替換現有檔案
引數
conditions: 查詢條件doc: 修改后的物件options: 配置引數callback: 回呼函式
// 修改_id為611a9aa01647216accf385fa的資料,將name改為張三
stuModel.update({ _id: '611a9aa01647216accf385fa' }, { $set: { name: '張三' } },function (err,doc) {
console.log(err, doc);
});


4. 洗掉檔案
remove(cinditions,callback)deleteOne(conditons.callback)deleteMant(conditions,callback)
// 洗掉檔案中 name: '張三' 的資料
stuModel.remove({ name: '張三' }, function (err, doc) {
if (!err) {
console.log(doc);
console.log('洗掉成功')
}
})

補充
Model.count(conditions , callback )conditions :條件callback: 回呼函式
stuModel.count({ name: '小明' }, function (err, count) {
console.log(count);
} )

Document檔案物件
- 通過
Model對資料庫進行查詢時, 會回傳Document物件或Document物件組合 Document繼承自Model,代表一個集合中的檔案Document物件也可以和資料庫進行互動操作
Document物件的方法
equals(doc)idget(path,[type])set(path,value,[type])update(update,[options,callback])save([callback])remove([callback])isNewisInit(path)toJSON()toObject()
前置代碼同上:
演示
1. 插入資料
save([callback])
const stuModel = mongoose.model('student', stuSchema);
// 創建一個Document
var stu1 = new stuModel({
name: '路明非',
age: 24,
gender: '男',
address:'卡塞爾學院'
});
// console.log(stu1);
// 呼叫document API 將資料保存到資料庫
stu1.save(function (err) {
if (!err) {
console.log('保存成功');
}
})


2. 更新資料
update(update,[options,callback])
// Mongoose中的方法也可以使用promise的方式
stuModel.findOne({}).then(res => {
res.update({ $set: { age: 22 } }).then(res => {
console.log('修改成功');
})
})
// 更新資料方法二
stuModel.findOne({}).then(res => {
res.age = 25;
res.save();
})
set(path,value,[type]): 根據當前document物件設定對應屬性值
// set()
stuModel.findOne({ name: '楚子航' }).then(res => {
console.log(res.set("age",15));
})

3. 洗掉資料
remove([callback])
// remove([callback]) - 洗掉資料
stuModel.findOne({ name: '楚子航' }).then(res => {
res.remove()
})
4. 獲取資料
get(path,[type]): 獲取當前document物件屬性
stuModel.findOne({ name: '楚子航' }).then(res => {
console.log(res.get('name'))
})

5. 轉換資料格式
toJSON(): 轉換為一個JSON物件
// toJSON()
stuModel.findOne({ name: '楚子航' }).then(res => {
console.log(res.toJSON());
})
toObject(): 將document物件轉換為一個普通的JS物件- 轉換為普通的
js物件以后, 注意所有的Document物件的方法或屬性都不能使用了
// toObject()
stuModel.findOne({ name: '楚子航' }).then(res => {
console.log(res.toObject());
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308487.html
標籤:NoSQL
