在node.js中使用mongoDB需要在項目中安裝mongoose模塊,安裝命令:npm install mongoose;對于mongoDB的操作我就不介紹了,大家感興趣可以看我上篇博客:http://www.lxweimin.com/p/dd70199063a4
接下來分享一下node中對mongoDB的操作
連接數(shù)據(jù)庫
當能打印數(shù)據(jù)庫連接成功字符,便是連接成功了
mongoose.connect("mongodb://localhost:27017/users");
var db = mongoose.connection;
db.on("error",function (error) {
if(error){
return console.log(error);
}
});
db.on("open",function () {
console.log("數(shù)據(jù)庫連接成功");
});
Schema骨架
- Schema: 一種以文件形式存儲的數(shù)據(jù)庫模型骨架,不具備數(shù)據(jù)庫的操作能力
- Model: 由Schema發(fā)布生成的模型,具有抽象屬性和數(shù)據(jù)庫操作能力
每一個 Schema 對應 MongoDB 中的一個集合(collection),Schema 中定義了集合中文檔的樣式。
下面設置了集合users的基本樣式,type是字段類型
var Schema = mongoose.Schema({
name:{type:String,default:11},
age:{type:Number},
hobby:{hobby1:{type:String},hobby2:{type:String}}
},{collection:'person'});
var Model = db.model("person",Schema);
操作數(shù)據(jù)庫
- 查詢所有年齡小于30的名字
參數(shù)一:查詢條件
參數(shù)二:查詢內(nèi)容
參數(shù)三:對調(diào)函數(shù),返回的數(shù)據(jù)為數(shù)組對象形式
Model.find({age:{$lt:30}},{name:1},function (err,data) {
if(err){
return console.log(err);
}else{
console.log(data);
}
})
返回的data為數(shù)組對象
82BE35246BEAF980CB6B160F2530F877.png
這里支持es6的promise寫法
Model.find({age:{$gt:30}},null).then((data) => {
console.log(data);
}).catch((err)=>{
return console.log(err);
});
- 添加數(shù)據(jù)
使用create方法,返回的的data為添加的數(shù)據(jù)
添加一條姓名為『周宏偉』,年齡為52的數(shù)據(jù)
Model.create({name:"周宏偉",age:52},function (err,data) {
if(err){
return console.log(err);
}else{
console.log(data);
}
});
注意下圖的數(shù)據(jù)中多一個 __v:0 字段,它代表是由node.js操作添加的數(shù)據(jù)
A5505778A0B3CEDA885D3C1CC4D5BF96.png
- 更新數(shù)據(jù)
使用update方法,返回的是更新成功或者失敗的狀態(tài)
Model.update({name:'李剛'},{$set:{age:35}},{multi:true},function (err,data) {
if(err){
console.log(err);
}else{
console.log(data);
}
});
ok:參數(shù)值為1表示更新成功;0表示更新失敗
E6EE8C5091C7B4CB73E50AA0FEE6549D.png
- 刪除數(shù)據(jù)
返回的data與上面update相似
Model.remove({name:'馬云'},function (err,data) {
if(err){
console.log(err);
}else {
console.log(data);
}
});
- 游標操作
sort參數(shù)值:1代表正序;-1代表倒序;
以年齡倒序排序
Model.find({},{},{sort:{age:-1}},function (err,data) {
if(err){
console.log(err);
}else {
console.log(data);
}
});