sql >> Databasteknik >  >> NoSQL >> MongoDB

fråga efter en samling utan att skicka schemat i mongoose

Från Mongooses hemsida:

Mongoose tillhandahåller en enkel, schemabaserad lösning för att modellera dina applikationsdata och inkluderar inbyggd typgjutning, validering, frågebyggnad, affärslogikkrokar och mer, direkt.

Mongoose kan inte från en samling potentiellt unika dokument sluta sig till ett schema. MongoDB upprätthåller inte schemat på dokumenten som lagras i en samling.

Så, Mongoose lägger till ett lager på NodeJS-drivrutinen (här) som många tycker är mer produktiv. Det är dock inte ett krav att använda med MongoDB när du använder Node.JS.

Mongoose behöver i grunden två saker för att fungera:

  1. Schema ==detta definierar dokumentstrukturen (referens). Du kan lägga till validering, nya metoder, lägga till virtuella egenskaper, använda datatyper, upprätta referenser till andra samlingar (modeller).
  2. Modell ==detta är klassen som sedan används vid körning för att uttrycka frågor mot samlingar (referens). En Schema-definition används för att bygga en modell.

Så, som du såg i provet du klistrade in, finns det en kattunge Schema definieras och sedan en Model Kitten är skapad. Det som är bra med att använda ett schema och en modell är att Mongoose sedan upprätthåller de egenskaper/fält som är tillgängliga.

Du definierar bara Schema s och Model s en gång i en ansökan. Så, vanligtvis när programmet startar, måste du köra kod för att definiera dem och sedan använda Model instanser efter behov under hela programmets livscykel.

Det finns många fler anledningar till att du skulle vilja använda Mongoose potentiellt.

Du har dock helt rätt, du kan bara använda något mer direkt, utan ett schema genom att använda den inbyggda drivrutinen för NodeJS. Syntaxen skulle likna det du visade, men lite mer komplex:

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

Snarare än det enkla:

Kitten.find(function(err, kittens) {

});

Dessutom, när du använder Mongoose kan du upptäcka att det är lättare att skriva och läsa mer komplexa frågor:

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

Jag skulle föreslå att du läser igenom mer av dokumentationen för att få en bättre känsla för ramverket och om det är en bra matchning för dina behov. Dokumentationen är tyvärr lite utspridd, men om du går igenom underrubrikerna till Guide rubrik kommer du att ha mycket bra information tillgänglig.



  1. Redis AOF fsync (ALLTID) kontra LSM-träd

  2. Hur man får flera listvärden i ett enda samtal i RedisTemplate av Jedis Client

  3. Hur man optimerar prestanda för MongoDB

  4. Spring data vila applikation får inte data från databasen efter att ha implementerat redis caching