/* 1.下載安裝mongoose npm i mongoose --save 2.引入數據庫 var mongoose = require("mongoose"); 3.鏈接數據庫 mongoose.connect("mongodb://localhost/test",{useMongoClient:true}); mongoose.connect("mongodb://數據庫的ip:端口號/數據庫名",{useMongoClient:true}) 新版中{useMongoClient:true}不用再寫了 端口號默認是27017則能夠省略 4.監聽數據庫鏈接狀態 在mongoose對象中,有一個屬性是connection,該對象表示的就是數據庫鏈接 經過監視該對象的狀態,能夠來監聽數據庫的鏈接與斷開 數據庫鏈接成功的事件 mongoose.connection.once("open",fn); 數據庫斷開的事件 mongoose.connection.once("close",fn); 5.斷開數據庫鏈接 mongoose.disconnect(); */
複製代碼
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/test",{useMongoClient:true});
mongoose.connection.once("open",function(){
console.log("數據庫鏈接成功!");
})
//建立約束模式
//將mongooose.Schema賦值給一個變量
var Schema = mongoose.Schema;
//建立Schema(模式)對象
var stuSchema = new Schema({
name:String;
age:Number;
gender:{
type:String,
default:"female"
},
address:String;
})
//建立model,代指集合
//經過Schema來建立Model
// Model表明的是數據庫中的集合,經過Model才能對數據庫進行操做
// mongoose.model(modelName,Schema)
// modelName 就是要映射的集合名
var stuModel = mongoose.model("students",stuSchema);
//建立文檔
// stuModel.create(doc,fn(err){})
stuModel.create({
name:"胡志武",
age:21,
address:"廣州"
},function(err){
if(!err){
console.log("建立文檔成功")
}
})
複製代碼
有了Model,咱們就能夠來對數據庫進行增刪改查的操做了javascript
Model.create(doc(s),[callback])
查詢java
Model.find(conditions,[projection],[options],[callback])
mongodb
Model.findOne([conditions],[projection],[options],[callback])
數據庫
Model.findById(id,[projection],[options],[callback])
npm
conditions 查詢的條件數組
projection 投影 須要獲取的字段,mongoose
options 查詢選項(skip limit)函數
callback 回調函數,查詢結果會經過回調函數返回ui
stuModel.find({name:"胡志武"},function(err,docs){
if(!err){
console.log(docs);
}
})
stuModel.find({},"name -id",function(err,docs){
if(!err){
console.log(docs);
}
})
stuModel.find({},"name -id",{skip:3},function(err,docs){
if(!err){
console.log(docs);
}
})
複製代碼
修改spa
Model.update(conditions,doc,[options],[callback])
Model.updateOne(conditions,doc,[options],[callback])
Model.updateMany(conditions,doc,[options],[callback])
stuModel.update({name:"胡志武"},{$set:{age:20}},function(err){
if(!err){
console.log("修改爲功");
}
})
複製代碼
刪除
Model.remove(conditions,[callback]);
Model.deleteOne(conditions,[callback]);
Model.delete(conditions,[callback]);
Model.remove({name:"胡志武"},function(err){
console.log("刪除成功!");
})
複製代碼
文檔的數量
Model.count(conditions,[callback])
stuModel.count({age:18},function(err,count){
console.log(count);
})
複製代碼
Document 和 集合中的文檔一一對應,Document是Model的實例
經過Model查詢到結果都是Document
建立一個Document
var stu = new StuModel({
name:"奔波霸",
age:48,
gender:"male",
address"碧波譚"
})
// 此時尚未插入數據庫中
/* document的方法 Model#save([option],[callback]) */
stu.save(function(err){
console.log("保存成功")
})
/* doc.update(update,[options],[callback] ) - 修改對象 doc.remove([callback]) - 刪除文檔 doc.get(name)===doc[name] doc.set(name,value)===doc[name]=value doc._id doc.toObject 轉化爲JS對象 轉化爲js對象才能刪除其中一個屬性 但轉化後document的方法都不能使用了 */
複製代碼
分兩步走:
var mongoose = require("mongoose")
var Schema = mongoose.Schema;
var article = new Schema({
//關聯字段 - 內容分類的id
category: {
//類型
type: mongoose.Schema.Types.ObjectId,
//引用
ref: 'Category'//數據庫中集合的名字
},
})
複製代碼
ref表示要關聯的集合名字,type表示經過ObjectId關聯該集合
Query.populate(path, [select], [model], [match],[options])
複製代碼
path:你要查詢的集合名
model:類型Model,指定要關聯字段的model,沒有指定的話,就會使用ref指定的
match:查詢條件
options:查詢參數,如limit,skip等
實例
content.findOne()
.populate({path:['user','catagory']})
.exec(function(err,data){
})
複製代碼
content.find()
.count()
.then(function(data){
return content.find().skip(data/2).limit(10)
}).then(function(data){
console.log(data)
})
複製代碼
若有錯漏處,還請看官們多多指正,若是以爲這篇文章對你有幫助的話,歡迎點贊分享!
若是要轉載,請註明出處
本文做者:胡志武
時間:2019/5/29