昨天讲了关联式资料库的MySQL,今天要接着介绍NoSQL中受欢迎的mongoDB,以及在NPM里mongoDB的相关套件与使用方式,
mongoDB是一种文件导向的资料库管理系统,其文件资料模型支援JSON格式与快速的查询语法使工程师易於学习与使用,且mongoDB具备免费的社群版本与支援多种不同程序语言驱动,也因此受到许多知名企业青睐,如:SEGA、Google、EA等,可透过MongoDB Compass介面或Terminal进行资料库管理。
NodeJS中常用的NPM套件有mongoose与mongodb。mongodb是mongoDB的原生服务器,而mongoose属於物件塑模工具,透过mongoose可以定义资料文件的schema,使mongoDB的资料库管理与建立更加便利,今天的练习以mongoose套件为主。
require()
引入。let mongoose = require("mongoose");
mongoose.connect()
建立与mongoDB服务器的连线,并设置两个回呼函式:连线完成执行内容与印出连线错误讯息。在mongoose套件中,可以使用connect()
或createConnection()
建立连线,但mongoose套件支援在连线尚未建立时就可以先定义schema,为了避免产生找不到定义的错误,这里使用内建Promise的connect()
方法,让连线的建立与schema定义以非同步的方式执行。mongoose.connect("mongodb://localhost:27017/nodeProj")
.then(()=>{},(err)=>{console.log(err)});
// 连线字串格式 mongodb:[user:pass@]address:port/database
var Person;
mongoose.connect("mongodb://localhost:27017/nodeProj")
.then(()=>{},(err)=>{console.log(err)});
var Person;
mongoose.connect("mongodb://localhost:27017/nodeProj")
.then(
()=>{
let personSchema = new mongoose.schema({
firstName: String,
lastName: String,
address: String
});
Person = mongoose.model("Person", personSchema);
},(err)=>{console.log(err)});
Person
model建构新的资料内容k、h并存进资料库,储存时提供印出错误讯息或完成储存讯息的回呼函式。var Person;
mongoose.connect("mongodb://localhost:27017/nodeProj")
.then(
()=>{
let personSchema = new mongoose.schema({
firstName: String,
lastName: String,
address: String
});
Person = mongoose.model("Person", personSchema);
let k = Person({
firstName: "chw",
lastName: "k",
address: "啦啦路123号"
});
let h = Person({
firstName: "chw",
lastName: "h",
address: "啦啦路123号"
});
k.save((err)=>{
if(err) console.log(err);
console.log("save person");
});
h.save((err)=>{
if(err) console.log(err);
console.log("save person");
});
},(err)=>{console.log(err)});
Person.find()
可以取得mongoDB中的Person资料。app.use("/", (req, res, next)=>{
console.log(`Requst Url: ${req.url}`);
Person.find({}, (err, users)=>{
if(err) console.log(err);
console.log(users);
});
next();
});
以前从来没有接触过NoSQL的资料库,mongoDB的学习可以说是获益良多加上饱受瓶颈,从Server的建置、资料库的逻辑加上工具的使用都花了一些时间,也不可否定他在使用上有其便利的地方,例如建立连线时就将资料库一并建立、除了范例中先建立schema,也可以在资料还不确定的情况下直接建立资料等。
https://mongoosejs.com/docs/connections.html#buffering
https://www.npmjs.com/package/mongoose
https://stackoverflow.com/questions/28712248/difference-between-mongodb-and-mongoose
https://zh.wikipedia.org/wiki/MongoDB
<<: Day24 React useContext-在子元件使用context
哈罗大家好~ 自从智慧型手机崛起之後,随着应用程序枝开叶散,我们的生活越来越离不开行动装置,甚至也逐...
课程主要是在於更好的优化data transform的时候data本身的优化处理: Permutat...
上午: Python程序设计 延续昨日课程,今日从流程控制开始,课程中老师也有出几个练习题让同学试着...
现在有不少的软件会有一个特殊的版本叫Nightly,从字面上的意思就可以得知是指每个晚上发行的版本,...
本篇音乐分享 本篇文章会提到的 上一篇衍生题:include,与extend差异? missing-...