Mongoose或MongoDB for Schema定义?

问题描述 投票:2回答:4

Mongoose用于定义模式。对?是否可以通过mongo Shell使用mongoDB创建架构?喜欢

例如:name:String

node.js mongodb mongoose meanjs
4个回答
1
投票

MongoDB不支持架构。这是一个基于模式的无文档数据库。

Mongoose是一个ODM(对象文档映射器),它有助于通过模式与MongoDB交互,还支持验证和挂钩。


0
投票

Mongoose有助于在对象/模型方面与MongoDB交互,因此程序员不需要理解记住MongoDB的语句。

此外,Mongoose提供了许多CRUD操作方法,以便更好地理解数据库操作。

你可以在这里查看例子

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/mongoose http://mongoosejs.com/docs/


0
投票

基本上mongodb是架构较少的数据库,我们无法直接在mongodb中创建架构。使用mongoose我们可以创建一个模式。使用mongoose的简单CRUD操作,更多信息请参阅此link

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

product.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 ');

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

0
投票

Mongoose具有验证和模式配置的优点,但它具有延迟和高/中等规模应用程序的一些问题。

恕我直言,使用原生mongodb软件包总是最好的。

关于模式,您可以创建自己的“模式”作为json文件,并为强制或有效属性编写自己的验证。

它更快,没有第三方包,更可靠。

© www.soinside.com 2019 - 2024. All rights reserved.