Вопрос о MongoDB и NodeJS

Я тренирую MongoDB и NodeJS, хотя я появляются какие-то сомнения. В моем файле APP я определил следующее

Здесь я помещаю им мой код (не замечайте его в замечания XD)

//esta variable almacena las funciones del paquete express, el cuál es el núcleo del framework
var express = require('express');

//esta variable almacena las funciones de la variable express, el cual le da vida a la página
var app = express();

//esta variable almacena las funciones del paquete mongoose el cual sirve para conectarse con MongoDB
var mongoose = require('mongoose');

//esta variable almacena las funciones del paquete body-parser, el cual sirve para traducir las peticiones en json
var bodyParser = require('body-parser');

//esta variable almacena las funciones del paquete cloudinary, el cual sirve para subir imagenes a la web
var cloudinary = require('cloudinary');

//esta variable almacena las funciones del paquete multer, el cual sirve para hacer más legibles de código las imágenes
var multer = require('multer');

//Se realiza la configuración de cloudinary con nuestra cuenta
cloudinary.config(
{
        cloud_name:"***",
        api_key:"***",
        api_secret:"***"
});

//Aquí le decimos que se conecte a mongo, la ruta por defecto es esta.
mongoose.connect('mongodb://localhost/myPage');

//Aquí le indicamos a app que use las funciones de bodyParser.
app.use(bodyParser.json());

//Aquí le indicamos que desencripte la información enviada por POST o GET
app.use(bodyParser.urlencoded({extended: true}));

//Aqui mencionamos que habrá una carpeta de archivos estaticos.
app.use(express.static("public"));

//Le indicamos a Express que use a multer con los parámetros, de donde se subiran las imágenes y su será una sola, un array o ocualquiera.
app.use(multer({dest: "./uploads"}).single('image_avatar'));

//se creará un nuevo esquema de productos, es decir, el esqueleto del documento JSON
var productosSchema =
{
    title:String,
    desc:String,
    imageUrl:String,
    price:Number
};

//Creamos una nueva variable la cual
var Product = mongoose.model("Product", productosSchema);

//se indica a la aplicación que jade será será el motor de vistas
app.set("view engine", "jade");

/*get es el método HTTP, también se usa POST pero eso es usado cuando
se hacen envíos de formulario. El primer parámetro es conocer a cuál
URL esta haciendo la petición, en este caso es la raíz. El segundo
es la respuesta del servidor*/
app.get("/", function(req,res)
{
    //se renderiza el index, el cual es el jade en views
    res.render('index');
});

//renderiza el archivo new.jade y nos dá la descripción del body enviado
app.post("/menu", function(req,res)
{

    //Aquí se crean los datos para la DB respetando el esqueleto que se definió arriba
    //la información la sacamos del request y después de body y luego de cada campo
    var data =
    {
        title : req.body.name,
        desc : req.body.desc,
        imageUrl : "",
        price : req.body.price
    }

    //se crea una nueva variable y se estancia del modelo definido arriba y se envían los datos.
    var product = new Product(data);

    //se usa la sentencia de claudinary para subir las fotos.
    cloudinary.uploader.upload(req.file.path,
    function(result)
    {
        //antes de guardar el JSON en MongoDB, le decimos que la url viene del result
        product.imageUrl = result.url;
        product.save(function(err)
        {
            console.log(result);
            console.log(product);
            res.render("menu/new");
        });
    });
});
//Se salva la información y se manda un mensaje a la consola.


//Renderiza el archivo new.jade
app.get("/menu/new",function(req,res)
{
    res.render("menu/new");
});

app.get("/menu",function(req,res)
{
    Product.find(function(error,document)
    {
        if(error)
        {
            console.log(error);
        }

        else
        {
            res.render("menu/index",{productos : document})
        }
    });
});

//Aquí se define cual es el puerto de escucha.
port = 3000;
app.listen(port);
console.log("Servidor corriendo en el puerto " + port);

Мой вопрос, Когда я навязал данные Mongo, он сделал это чудом, хотя у меня не было этой Коллекции "Product" я себе верю в коллекцию так называемый products, который ни в какой стороне кода я определил как новую коллекцию. Это запутывает меня много, кто-то может помогать мне говорить мне, как функционирует это?

Кроме того, когда я хочу принести данные Mongo, я должен использовать решение Product.find() из-за которого, если я использую ее как products.find() меня помечает ошибка. Которое я имею в виду, дело в том, что, не предполагается, что я должен делать queries, как он бы это написал в Mongo?

1
задан 01.08.2016, 04:01
2 ответа

Драйверы Mongodb различных языков, они заботятся о создании коллекции в случае, который не существует. Именно из-за этого, когда ты присоединился, драйвер искал твою коллекцию, и не найдя ее, он создал ее прозрачной формы.

Относительно метода find, это касающееся API mongoose. Сделав

var Product = mongoose.model("Product", productosSchema);

ты создаешь класс Product который обладает статическими методами, которые делают названные в mongo. Если ты делал products.find ты звонил бы в метод find array продуктов.

2
ответ дан 24.11.2019, 13:44
  • 1
    Но из-за которого products.find не быть и # 237; в Product.find? Я говорю, из-за которого схвати, и # 237; declar и # 233; как класс. –  Alberto Siurob 01.08.2016, 19:50
  • 2
    @AlbertoSiurob я говорю именно противоположность. Будь должен использовать Product.find не products.find –  Pablo Alcantar 02.08.2016, 10:58
  • 3
    Я думаю, что я не определил себя совсем хорошо, отношусь, в который, меня в ning и # 250; n сторона c и # 243; я говорю, что я заявил products, declar и # 233; Product, который отличается. Мой вопрос, - из-за qu и # 233; colecci и # 243; n в Mongo он называется products, если я не declar и # 233; совсем не с этим именем, –  Alberto Siurob 02.08.2016, 19:28
  • 4
    @AlbertoSiurob сейчас я понимаю твой вопрос. Com и # 250; nmente, рекомендуемо создавать таблицы / коллекции BD как множественное число и #39; я возражаю и # 39; который они представляют. Именно поэтому mongoose pluraliza schema, что ты показал ему прицел ac и # 225; mongoosejs.com/docs/guide.html#collection , где ты можешь помещать имя, которое ты хочешь. –  Pablo Alcantar 02.08.2016, 23:00
  • 5
    #161; Дайте ему пиво! Спасибо. –  Alberto Siurob 02.08.2016, 23:13

Пример одной bГєsqueda с mongoose, сначала я оставляю тебе структуру json ее colecciГіn: { пойдите:'id', attribs: { имя: 'имя', categorГ-эксперт: 'категория', детали: 'детали' } }

products.find({attribs: {$elemMatch: {categoria : "bebidas"}}}, function (err, products){

}
0
ответ дан 24.11.2019, 13:44