sql >> Databáze >  >> NoSQL >> MongoDB

dotazování kolekce bez předání schématu v mongoose

Z domovské stránky Mongoose:

Mongoose poskytuje přímočaré řešení založené na schématech pro modelování dat vaší aplikace a zahrnuje vestavěné přetypování, ověřování, vytváření dotazů, háčky obchodní logiky a další.

Mongoose nemůže z kolekce potenciálně jedinečných dokumentů odvodit schéma. MongoDB nevynucuje schéma na dokumenty, které jsou uloženy v kolekci.

Mongoose tedy přidává vrstvu nativního ovladače NodeJS (zde), kterou mnozí považují za produktivnější. Není však podmínkou použití s ​​MongoDB při použití Node.JS.

Mongoose potřebuje k práci zásadně dvě věci:

  1. Schéma ==definuje strukturu dokumentu (odkaz). Můžete přidávat ověřování, nové metody, přidávat virtuální vlastnosti, používat datové typy, vytvářet odkazy na jiné kolekce (modely).
  2. Model ==toto je třída, která se pak používá za běhu k vyjádření dotazů na kolekce (odkaz). K vytvoření modelu se používá definice schématu.

Jak jste tedy viděli ve vloženém vzorku, existuje Schema kotěte a poté Model Kitten je vytvořen. Na použití schématu a modelu je hezké, že Mongoose poté vynucuje vlastnosti/pole, která jsou k dispozici.

Definujete pouze Schema s a Model s jednou v aplikaci. Obvykle tedy při spuštění aplikace budete muset spustit kód k jejich definování a poté použít Model instance podle potřeby v průběhu životního cyklu aplikace.

Existuje mnoho dalších důvodů, proč byste chtěli Mongoose potenciálně používat.

Máte však naprostou pravdu, můžete použít něco přímějšího, bez schématu pomocí nativního ovladače NodeJS. Syntaxe by byla podobná té, kterou jste ukázali, ale trochu složitější:

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

Spíše než jednoduché:

Kitten.find(function(err, kittens) {

});

Navíc při používání Mongoose možná zjistíte, že psaní složitějších dotazů je jednodušší na psaní a čtení:

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

Doporučuji přečíst si více dokumentace, abyste získali lepší představu o rámci a o tom, zda je vhodný pro vaše potřeby. Dokumentace je bohužel trochu roztroušená, ale pokud si projdete podnadpisy Guide budete mít k dispozici spoustu dobrých informací.



  1. MongoDB Embedded Objects nemají žádné ID (hodnota null)

  2. Jak stránkovat s Mongoose v Node.js?

  3. Mongo Aggregation:$group a $project array to object for counts

  4. Proč je výkon Redis SET lepší než GET?