Použití parametrů řetězce dotazu v Mongoose

Mongoose's Model.find() Funkce je důležitá metoda, které je třeba porozumět. Můžete ji volat bez jakýchkoli argumentů a vrátí všechny dokumenty v tomto modelu. Můžete předat filter který říká Mongoose, co má v databázi hledat. Toto filter může být objectId nebo object .Při použití Model.find() , měli byste výslovně uvést parametry, které v modelu hledáte. To je důležité při získávání parametrů filtru z řetězce dotazu.

const testSchema = new mongoose.Schema({
  name: String,
  location: String
});

const obj = { name: 'Mastering JS', location: 'Florida' };

// In request handler
await Model.find({ firstName: req.query.firstName });

Model.find() s prázdným objektem

Model.find() Výchozí chování je, že vrátí všechny dokumenty v modelu, takže pokud žádná z předávaných vlastností neexistuje, místo toho dostanete zpět všechny dokumenty.

// Do **not** do this! `req.query` may be an empty object,
// in which case the query will return **every** document.
await Model.find(req.query);

sanitizeFilter

Mongoose 6 představuje nový sanitizeFilter možnost, která chrání před útoky vkládání selektoru dotazů. Jednoduše zabalí filtr do $eq tag, který zabraňuje útokům vkládání selektoru dotazů.

Pomocí sanitizeFilter je zvláště důležité, pokud používáte Express.Express dokáže ve výchozím nastavení analyzovat objekty z řetězců dotazů a řetězce dotazů Express jsou případem použití, který inspiroval původní blogový příspěvek o vkládání selektoru dotazů.

// With `sanitizeFilter`, Mongoose converts the below query to
// `{ email, hashedPassword: { $eq: { $ne: null } } }`
const user = await User.find({ email: '[email protected]', hashedPassword: { $ne: null } }).setOptions({ sanitizeFilter: true });
Chcete se stát expertem svého týmu na MongoDB? "Mastering Mongoose" obsahuje 8 let těžce získaných lekcí budování aplikací Mongoose v měřítku na 153 stránkách. To znamená, že se můžete naučit to, co potřebujete vědět, abyste mohli za pár dní vytvářet produkční full-stack aplikace s Node.js a MongoDB. Získejte svou kopii!