MongoDB and Mongoose in Action All In One
Node.js API Server
Mongoose Model
Mongoose v7.6.0: Model
// DB name ✅
mongoose.connect('mongodb://127.0.0.1:27017/database_name');
const MyModel = mongoose.model('Test', new Schema({ name: String }));
// Works
await MyModel.findOne();
https://mongoosejs.com/docs/connections.html#buffering
Mongoose API
.findOne
vs.find
https://mongoosejs.com/docs/api/model.html#Model.findOne()
https://mongoosejs.com/docs/api/model.html#Model.find()
auto convert Mongoose model
to MongoDB collection
✅
// ❌ MongooseError: Operation `wikis.find()` buffering timed out after 10000ms
// mongoose.connect(`mongodb://localhost:27017/`, {useNewUrlParser: true})
// ✅ so
mongoose.connect(`mongodb://127.0.0.1:27017/so`, {useNewUrlParser: true})
.then(() => {
console.log('✅');
})
.catch((err) => {
console.log('❌', err);
});
const ArticleSchema = {
title: String,
content: String
};
// model ❓ db collection
// wiki => wikis ✅ 自动创建的
// const Article = mongoose.model("wiki", ArticleSchema);
// art => arts ✅ 自动创建的
const Article = mongoose.model("art", ArticleSchema);
demos
const express = require("express");
const mongoose = require("mongoose");
// const bodyParser = require("body-parser");
// const ejs = require("ejs");
const app = express();
// app.use(bodyParser.urlencoded({
// extended: true
// }));
// app.set('view engine', 'ejs');
app.use(express.static("public"));
// ❌ MongoParseError: option gssapiservicename is not supported
// mongoose.connect("mongodb://localhost:27017/?compressors=disabled&gssapiServiceName=mongodb", {useNewUrlParser: true});
// ❌ MongooseError: Operation `wikis.find()` buffering timed out after 10000ms
// mongoose.connect(`mongodb://localhost:27017/`, {useNewUrlParser: true})
// ✅ so
mongoose.connect(`mongodb://127.0.0.1:27017/so`, {useNewUrlParser: true})
.then(() => {
console.log('✅');
})
.catch((err) => {
console.log('❌', err);
});
const ArticleSchema = {
title: String,
content: String
};
// model ❓ db collection
const Article = mongoose.model("wiki", ArticleSchema);
app.route("/articles")
.get(async (req, res) => {
const articles = await Article.find();
console.assert(`articles =`, articles)
articles.forEach((article, i) => {
console.log(`article`, i, article);
});
// mongoose.connection.close();
res.json({
articles,
});
// res.send(articles);
});
// http://localhost:3000/articles
app.route("/articles/:articleTitle")
.get(async (req, res) => {
const title = req.params.articleTitle;
console.log(`title =`, title);
// const article = await Article.find({title});
const article = await Article.findOne({title});
console.log(`article`, article);
res.json({
article
});
// res.send(article);
});
// http://localhost:3000/articles/REST
// app.route("/articles/:articleTitle")
// .get((req, res) => {
// const title = req.params.articleTitle;
// console.log(`title =`, title);
// Article.find({title})
// .then((article) => {
// console.log(`article`, article);
// res.json({
// article
// });
// // res.send(article);
// })
// .catch((err) => {
// console.log(err);
// });
// });
const port = 3000;
app.listen(port, () => {
console.log(`http server is running on: http://localhost:${port}/`);
});
// http://localhost:3000/
/*
db.wiki.insertOne({title: "REST", content: "REST is short for REpresentational State Transfer. It's an architectural style for designing APIs."})
db.wiki.find().pretty()
{
"_id" : ObjectId("652167ce2dc49222ad06fac0"),
"title" : "REST",
"content" : "REST is short for REpresentational State Transfer. It's an architectural style for designing APIs."
}
❓model 自动创建的 collection 数据为空,需要手动添加数据
db.wikis.insertOne({title: "REST", content: "REST is short for REpresentational State Transfer. It's an architectural style for designing APIs."})
*/
wikis ❓自动创建的
$ mongo
> use so;
> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
so 0.000GB
test 0.000GB
> show tables;
student
teacher
wiki
wikis
> db.wikis.find().pretty()
{
"_id" : ObjectId("65217ae22dc49222ad06fac1"),
"title" : "REST",
"content" : "REST is short for REpresentational State Transfer. It's an architectural style for designing APIs."
}
(? 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!
MongoDB Connection URI
protocol://credentials@hostanme/IP:port/?options
Standard Connection String Format
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
mongodb://myDatabaseUser:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin
Connection Options
refs
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 ?️,侵权必究⚠️!