MongoDB and Mongoose in Action All In One

发布时间 2023-10-08 00:47:26作者: xgqfrms

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);

image

image

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."})


*/

image

image

image

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."
}

image

(? 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!

MongoDB Connection URI

protocol://credentials@hostanme/IP:port/?options

image

https://www.mongodb.com/docs/drivers/node/current/fundamentals/connection/connect/#std-label-node-connect-to-mongodb

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

https://www.mongodb.com/docs/drivers/node/current/fundamentals/connection/connection-options/#std-label-node-connection-options

refs

https://stackoverflow.com/questions/77249580/trouble-finding-a-specific-item-from-mongodb-using-nodejs/77249734#77249734



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 ?️,侵权必究⚠️!