作用:Mongoose是一個讓我們可以通過Node來操作MongoDB的模塊, Mongoose是一個物件檔案模型(ODM)庫,它對Node原生的MongoDB模塊進行了進一步的優化封裝,并提供了更多的功能,mongoose中為我們提供了幾個新的物件,
Schema(模式物件)
- Schema物件定義約束了資料庫中的檔案結構
Model
- Model物件作為集合中的所有檔案的表示,相當于
MongoDB資料庫中的集合collection
Document
- Document表示集合中的具體檔案,相當于集合中
的一個具體的檔案
使用:
下載安裝Mongoose
npm i mongoose --save
在專案中引入mongoose
var mongoose = require("mongoose");
連接MongoDB資料庫
mongoose.connect('mongodb://資料庫的ip地址:埠號/資料庫名', { useMongoClient: true});
注:如果埠號是默認埠號(27017) 則可以省略不寫
斷開資料庫連接(一般不需要呼叫)
MongoDB資料庫,一般情況下,只需要連接一次,連接一次以后,除非專案停止服務器關閉,否則連接一般不會斷開
mongoose.disconnect()
監聽MongoDB資料庫的連接狀態
在mongoose物件中,有一個屬性叫做connection,該物件表示的就是資料庫連接,通過監視該物件的狀態,可以來監聽資料庫的連接與斷開
資料庫連接成功的事件
mongoose.connection.once("open",function(){});
資料庫斷開的事件
mongoose.connection.once("close",function(){});
測驗資料庫的連接:
//引入
var mongoose = require("mongoose");
//連接資料庫
mongoose.connect("mongodb://xxxxxxxx/test" , { useMongoClient: true});
mongoose.connection.once("open",function(){
console.log("資料庫連接成功~~~");
});
mongoose.connection.once("close",function(){
console.log("資料庫連接已經斷開~~~");
});
//斷開資料庫連接
mongoose.disconnect();
通過Schema來創建Model
Model代表的是資料庫中的集合,通過Model才能對資料庫進行操作:
- mongoose.model(modelName, schema):
modelName 就是要映射的集合名 mongoose會自動將集合名變成復數
//引入
var mongoose = require("mongoose");
//連接資料庫
mongoose.connect("mongodb://xxxxxxx/test" , { useMongoClient: true});
mongoose.connection.once("open", function() {
console.log("資料庫連接成功~~~");
});
//將mongoose.Schema 賦值給一個變數
var Schema = mongoose.Schema;
//創建Schema(模式)物件
var stuSchema = new Schema({
name: String,
age: Number,
gender: {
type: String,
default: "female"
},
address: String
});
//通過Schema來創建Model
//Model代表的是資料庫中的集合,通過Model才能對資料庫進行操作
//mongoose.model(modelName, schema):
//modelName 就是要映射的集合名 mongoose會自動將集合名變成復數
var StuModel = mongoose.model("student", stuSchema);
//向資料庫中插入一個檔案
//StuModel.create(doc, function(err){});
StuModel.create({
name: "白骨精",
age: 16,
address: "白骨洞"
}, function(err) {
if(!err) {
console.log("插入成功~~~");
}
});
Model的操作
有了Model,我們就可以來對資料庫進行增刪改查的操作了
- Model.create(doc(s), [callback]):用來創建一個或多個檔案并添加到資料庫中
- 引數:
doc(s) 可以是一個檔案物件,也可以是一個檔案物件的陣列
callback 當操作完成以后呼叫的回呼函式
查詢:
-
Model.find(conditions, [projection], [options], [callback]):查詢所有符合條件的檔案 總會回傳一個陣列
-
Model.findById(id, [projection], [options], [callback]): 根據檔案的id屬性查詢檔案
-
Model.findOne([conditions], [projection], [options], [callback]):查詢符合條件的第一個檔案 總和回傳一個具體的檔案物件
conditions 查詢的條件
projection 投影 需要獲取到的欄位兩種方式:
{name:1,_id:0}
“name -_id”options 查詢選項(skip limit)
{skip:3 , limit:1}
注:callback 回呼函式,查詢結果會通過回呼函式回傳,回呼函式必須傳,如果不傳回呼函式,壓根不會查詢
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});
mongoose.connection.once("open",function () {
console.log("資料庫連接成功~~~");
});
var Schema = mongoose.Schema;
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"female"
},
address:String
});
var StuModel = mongoose.model("student" , stuSchema);
StuModel.find({name:"唐僧"},function (err , docs) {
if(!err){
console.log(docs);
}
});
//只要name不要id
StuModel.find({},{name:1 , _id:0},function (err , docs) {
if(!err){
console.log(docs);
}
});
//要name和age,不要id,分頁
StuModel.find({},"name age -_id", {skip:3 , limit:1} , function (err , docs) {
if(!err){
console.log(docs);
}
});
StuModel.findOne({} , function (err , doc) {
if(!err){
console.log(doc);
}
});
StuModel.findById("59c4c3cf4e5483191467d392" , function (err , doc) {
if(!err){
//console.log(doc);
//通過find()查詢的結果,回傳的物件,就是Document,檔案物件
//Document物件是Model的實體
console.log(doc instanceof StuModel);
}
});
//直接通過Model來 創建物件
StuModel.create([
{
name:"沙和尚",
age:38,
gender:"male",
address:"流沙河"
}
],function (err) {
if(!err){
console.log(arguments);
}
});
修改:
Model.update(conditions, doc, [options], [callback])
Model.updateMany(conditions, doc, [options], [callback])
Model.updateOne(conditions, doc, [options], [callback])
- 用來修改一個或多個檔案
- 引數:
conditions 查詢條件
doc 修改后的物件
options 配置引數
callback 回呼函式
Model.replaceOne(conditions, doc, [options], [callback])
//修改唐僧的年齡為20
StuModel.updateOne({name:"唐僧"},{$set:{age:20}},function (err) {
if(!err){
console.log("修改成功");
}
});
洗掉:
Model.remove(conditions, [callback])
Model.deleteOne(conditions, [callback])
Model.deleteMany(conditions, [callback])
StuModel.remove({name:"白骨精"},function (err) {
if(!err){
console.log("洗掉成功~~");
}
});
Model.count(conditions, [callback])
StuModel.count({},function (err , count) {
if(!err){
console.log(count);
}
});
Document認識
Document 和 集合中的檔案一一對應 , Document是Model的實體通過Model查詢到結果都是Document
document的方法:
- Model#save([options], [fn]):將修改的內容保存到資料庫中
- update(update,[options],[callback]):修改物件
- remove([callback]): 洗掉物件
- get(name):- 獲取檔案中的指定屬性值
- set(name , value):設定檔案的指定的屬性值
- id: 獲取檔案的_id屬性值
- toObject(): 將Document物件轉換為一個普通的JS物件,轉換為普通的js物件以后,注意所有的Document物件的方法或屬性都不能使用
//連接資料庫,創建 Schema 和 Model
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});
mongoose.connection.once("open",function () {
console.log("資料庫連接成功~~~");
});
var Schema = mongoose.Schema;
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"female"
},
address:String
});
var StuModel = mongoose.model("student" , stuSchema);
//創建一個Document
var stu = new StuModel({
name:"奔波霸",
age:48,
gender:"male",
address:"碧波潭"
});
stu.save(function (err) {
if(!err){
console.log("保存成功~~~");
}
});
StuModel.findOne({},function (err , doc) {
if(!err){
doc.update({$set:{age:28}},function (err) {
if(!err){
console.log("修改成功~~~");
}
}
});
doc.age = 18;
doc.save();//必須呼叫SAVE方法才能修改資料庫
doc.remove(function (err) {
if(!err){
console.log("大師兄再見~~~");
}
});
mongoDB官方檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/132163.html
標籤:其他
