sql >> Database teknologi >  >> NoSQL >> MongoDB

forespørgsel på en samling uden at sende skema i mongoose

Fra Mongoose-hjemmesiden:

Mongoose leverer en ligetil, skemabaseret løsning til modellering af dine applikationsdata og inkluderer indbygget typestøbning, validering, forespørgselsopbygning, forretningslogikhooks og mere, ud af kassen.

Mongoose kan ikke udlede et skema fra en samling af potentielt unikke dokumenter. MongoDB håndhæver ikke skema på de dokumenter, der er gemt i en samling.

Så Mongoose tilføjer et lag på den oprindelige NodeJS-driver (her), som mange finder mere produktiv. Det er dog ikke et krav at bruge med MongoDB, når du bruger Node.JS.

Mongoose har grundlæggende brug for to ting for at fungere:

  1. Skema ==dette definerer dokumentstrukturen (reference). Du kan tilføje validering, nye metoder, tilføje virtuelle egenskaber, bruge datatyper, etablere referencer til andre samlinger (modeller).
  2. Model ==dette er den klasse, der så bruges ved kørsel til at udtrykke forespørgsler mod samlinger (reference). En skemadefinition bruges til at bygge en model.

Så som du så i prøven, du indsatte, er der en killing Schema defineret, og derefter en Model Kitten er oprettet. Det rart ved at bruge et skema og en model er, at Mongoose så håndhæver de egenskaber/felter, der er tilgængelige.

Du definerer kun Schema s og Model s én gang i en ansøgning. Så normalt når applikationen starter, skal du udføre kode for at definere dem og derefter bruge Model forekomster efter behov i hele applikationens livscyklus.

Der er mange flere grunde til, at du potentielt vil bruge Mongoose.

Du har dog fuldstændig ret, du kunne bare bruge noget mere direkte uden et skema ved at bruge den oprindelige NodeJS-driver. Syntaksen ville ligne det, du viste, men en smule mere kompleks:

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

I stedet for det simple:

Kitten.find(function(err, kittens) {

});

Plus, når du bruger Mongoose, kan du opleve, at det er lettere at skrive og læse mere komplekse forespørgsler:

Kitten.find().where('name', 'Harold').exec(/*callback*/);

Jeg vil foreslå, at du læser mere af dokumentationen igennem for at få en bedre fornemmelse af rammerne, og om det passer godt til dine behov. Dokumentationen er desværre lidt spredt, men hvis du gennemgår underoverskrifterne i Guide overskrift, vil du have en masse god information tilgængelig.



  1. Skub til Laravel-kø fra uden for Laravel (NodeJS)

  2. Docker&Celery - FEJL:Pidfile (celerybeat.pid) findes allerede

  3. Kan ikke få Jedis-forbindelse, når du bruger SSL med Redis og Spring Data Redis

  4. Komplekse datastrukturer Redis