介紹 無論是mysql還是mongodb,傳統的與資料庫交互的方式都是按照他們提供的API來寫代碼。它們提供的API往往不是很容易理解,而且難以記憶,如果傳錯了參數,寫錯一個符號都要查文檔。 ORM(對象關係映射,Object Relational Mapping)框架,允許我們面向對象操作,不需要 ...
介紹
無論是mysql還是mongodb,傳統的與資料庫交互的方式都是按照他們提供的API來寫代碼。它們提供的API往往不是很容易理解,而且難以記憶,如果傳錯了參數,寫錯一個符號都要查文檔。
ORM(對象關係映射,Object Relational Mapping)框架,允許我們面向對象操作,不需要記憶任何的資料庫API,只需要操作對象即可,由框架底層去調用資料庫API,這樣就大大提高了程式員的開發效率。
不過既然多了一層封裝,肯定要損失一點點的性能,可以忽略不計。
在NodeJS中,操作mongodb最好的ORM框架就是mongoose。
安裝mongoose
npm install mongoose --save
如果你本機沒有安裝nodejs驅動,會自動安裝nodejs驅動,因為mongoose依賴nodejs驅動。
文檔參考:mongoose官方文檔:http://mongoosejs.com/docs/index.html
連接資料庫
'use strict'
let User = require('./model/user');
let mongoose = require('mongoose');
mongoose.connect("mongodb://127.0.0.1/test");
let db = mongoose.connection;
// 監聽錯誤的事件
db.on('error', err => {
console.log(err);
});
db.once('open', () => {
console.log('mongodb connect successfully!');
highOrderQuery()
});
模型定義
mongoose
使用schema
來描述數據的格式、欄位、規則,有了schema
之後可以生成model
來操作數據。
一般我們新建一個model目錄來存放這些模型文件,比如這裡我們新建一個model/user.js
'use strict'
let mongoose = require('mongoose');
let schema = mongoose.Schema({
name: String,
age: Number,
address: String,
fav: [String]
}, {
versionKey: false
}
);
module.exports = mongoose.model("users", schema);
增刪改查
直接查看文檔中Model相關API。
async function testCRUD() {
//增
let arr = [
{
name: "李連傑", age: 50, address: "北京", fav: ["功夫", "演電影", "旅游"]
},
{
name: "吳京", age: 48, address: "北京", fav: ["功夫", "演電視劇", "運動"]
},
];
let res = await User.create(arr);
console.log(res);
//查
let res = await User.findOne({address: "北京"}); //查詢出符合條件的第一個文檔
console.log(res);
let res = await User.find({address: "北京"}); // 查詢出符合條件的所有文檔
console.log(res);
//改
let res = await User.updateOne({_id: "5b4065e548651d0b7035843d"}, {age: 11, address: "深圳"});
console.log(res);
//刪
let res = await User.deleteOne({_id: "5b4065e548651d0b7035843d"});
console.log(res);
}
高級查詢
所有條件操作符:https://docs.mongodb.com/manual/reference/operator/query/
。
async function highOrderQuery() {
//條件查詢
let res = await User.find({age: {$gt: 15}});
//數組查詢
let res = await User.find({
fav: "玩游戲"
});
//分頁查詢
// sort({age:1}) : 1(預設)是從小到大,-1是從大到小
// sort("-age") :可以直接寫`-`,表示從大到小
// select("")只選擇某個或某幾個欄位;select("-fav")不選某個欄位
let res = await User.find().skip(0).limit(2).sort("-age").select("-fav");
console.log(res);
}
參考
黑馬程式員 120天全棧區塊鏈開發 開源教程
https://github.com/itheima1/BlockChain
一番霧語:操作mongodb最好的NodeJS框架。
免費知識星球:一番碼客-積累交流 微信公眾號:一番碼客 微信:Efon-fighting 網站:http://www.efonmark.com |