[英]Mongoose or MongoDB for Schema definition?
Mongoose 用於定義模式。 對? 是否可以通過 mongo Shell 使用 mongoDB 創建模式? 喜歡
例如:名稱:字符串
MongoDB 不支持架構。 它是一個基於無模式文檔的數據庫。
Mongoose 是一個 ODM(對象文檔映射器),它有助於通過模式與 MongoDB 交互,此外它還支持驗證和鈎子。
基本上 mongodb 是無模式的數據庫,我們無法直接在 mongodb 中創建模式。 使用 mongoose 我們可以創建一個模式。 使用貓鼬的簡單 CRUD 操作,有關更多信息,請參閱此鏈接
包.json
{
"name": "product-api",
"main": "server.js",
"dependencies": {
"express": "~4.0.0",
"body-parser": "~1.0.1",
"cors": "2.8.1",
"mongoose": "~3.6.13"
}
}
產品.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ProductSchema = new Schema({
title: String,
price: Number,
instock : Boolean,
photo : String ,
});
module.exports = mongoose.model('Product', ProductSchema);
// module.exports = mongoose.model('Product', ProductSchema,'optiponally pass schema name ');
服務器.js
var express = require('express');
var bodyParser = require('body-parser');
var cors = require('cors');
var app = express();
var mongoose = require('mongoose');
var product = require('./product');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 8090;
var router = express.Router();
mongoose.connect('mongodb://localhost:27017/products');
// Middle Route
router.use(function (req, res, next) {
// do logging
// do authentication
console.log('Logging of request will be done here');
next(); // make sure we go to the next routes and don't stop here
});
router.route('/products').post(function (req, res) {
console.log("in add");
var p = new product();
p.title = req.body.title;
p.price = req.body.price;
p.instock = req.body.instock;
p.photo = req.body.photo;
p.save(function (err) {
if (err) {
res.send(err);
}
console.log("added");
res.send({ message: 'Product Created !' })
})
});
router.route('/products').get(function (req, res) {
product.find(function (err, products) {
if (err) {
res.send(err);
}
res.send(products);
});
});
router.route('/products/:product_id').get(function (req, res) {
product.findById(req.params.product_id, function (err, prod) {
if (err)
res.send(err);
res.json(prod);
});
});
router.route('/products/:product_id').put(function (req, res) {
product.findById(req.params.product_id, function (err, prod) {
if (err) {
res.send(err);
}
prod.title = req.body.title;
prod.price = req.body.price;
prod.instock = req.body.instock;
prod.photo = req.body.photo;
prod.save(function (err) {
if (err)
res.send(err);
res.json({ message: 'Product updated!' });
});
});
});
router.route('/products/:product_id').delete(function (req, res) {
product.remove({ _id: req.param.product_id }, function (err, prod) {
if (err) {
res.send(err);
}
res.json({ message: 'Successfully deleted' });
})
});
app.use(cors());
app.use('/api', router);
app.listen(port);
console.log('REST API is runnning at ' + port);
Mongoose 幫助在 Object/Model 方面與 MongoDB 進行交互,這樣程序員不需要理解記住 MongoDB 的語句。
此外,Mongoose 提供了很多 CRUD 操作的方法來更好地理解 DB 操作。
您可以在此處查看示例
https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/mongoose http://mongoosejs.com/docs/
Mongoose 有其驗證和模式配置的優點,但也有延遲和一些高/中規模應用程序的問題。
恕我直言,使用本機 mongodb 包總是最好的。
關於架構,您可以創建自己的“架構”作為 json 文件,並為強制性或有效屬性編寫自己的驗證。
它更快,沒有第三方軟件包,更可靠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.