Dois-je bien comprendre que si je veux interroger une collection, je dois faire ce qui suit:
var mongoose = require("mongoose");
mongoose.connect();
var db = mongoose.connection;
db.on('open', function callback () {
var kittySchema = mongoose.Schema({
name: String
})
var Kitten = mongoose.model('Kitten', kittySchema)
Kitten.find(function (err, kittens) {
console.log(kittens);
})
});
Dois-je spécifier le schéma à chaque fois, même s'il y a déjà une collection de chatons?
Pourquoi ne puis-je pas faire quelque chose comme db.Kittens.find()
?
De la page d'accueil de Mongoose:
Mongoose fournit une solution simple, basée sur un schéma, pour la modélisation de vos données d’application et inclut le transtypage de type intégré, validation, création de requêtes, crochets de logique métier et plus, hors du boîte.
Mongoose ne peut pas déduire d'un schéma un ensemble de documents potentiellement uniques. MongoDB n'applique pas le schéma sur les documents stockés dans une collection.
Mongoose ajoute donc une couche sur le pilote natif de NodeJS ( ici ) que beaucoup trouvent plus productive. L'utilisation de MongoDB n'est cependant pas obligatoire lorsque vous utilisez Node.JS.
Mongoose a fondamentalement besoin de deux choses pour fonctionner:
Ainsi, comme vous l'avez vu dans l'exemple que vous avez collé, un chaton Schema
est défini, puis une Model
Kitten
est créée. Ce qui est bien avec l’utilisation d’un schéma et d’un modèle, c’est que Mongoose applique ensuite les propriétés/champs disponibles.
Vous définissez uniquement les Schema
s et Model
s une fois dans une application. Ainsi, généralement au démarrage de l'application, vous devez exécuter du code pour les définir, puis utiliser les instances Model
selon les besoins tout au long du cycle de vie de l'application.
Il y a beaucoup d'autres raisons pour lesquelles vous voudriez utiliser potentiellement Mongoose.
Vous avez tout à fait raison, vous pouvez simplement utiliser quelque chose de plus direct, sans schéma en utilisant le pilote natif NodeJS. La syntaxe serait semblable à celle que vous avez montrée, mais un peu plus complexe:
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
if(err) { return console.dir(err); }
var collection = db.collection('kittens');
collection.find().toArray(function(err, kittens) {
// here ...
});
});
Plutôt que le simple:
Kitten.find(function(err, kittens) {
});
De plus, lorsque vous utilisez Mongoose, il peut être plus simple d'écrire et de lire des requêtes plus complexes:
Kitten.find().where('name', 'Harold').exec(/*callback*/);
Je suggérerais de lire davantage de documentation pour avoir une meilleure idée du cadre et savoir s'il correspond bien à vos besoins. La documentation est malheureusement un peu éparse, mais si vous parcourez les sous-titres de la rubrique Guide
, vous aurez beaucoup de bonnes informations disponibles.
Vous ne pouvez pas utiliser Mongoose sans schémas. Si vous voulez utiliser MongoDB sans schéma, n'utilisez pas Mongoose, utilisez plutôt quelque chose comme mongodb .
essaye ça..
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ProductSchema = new Schema({}, { strict: false });
const Product = mongoose.model('Product', ProductSchema, 'products');
module.exports = { Product };