Skip to content

Commit 9fe5884

Browse files
committed
chore: website 8.14.1
1 parent ebb3482 commit 9fe5884

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

docs/typescript/queries.html

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>Mongoose v8.14.1: Mongoose: Queries in TypeScript</title><link rel="apple-touch-icon" sizes="57x57" href="/docs/images/favicon/apple-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="/docs/images/favicon/apple-icon-60x60.png"><link rel="apple-touch-icon" sizes="72x72" href="/docs/images/favicon/apple-icon-72x72.png"><link rel="apple-touch-icon" sizes="76x76" href="/docs/images/favicon/apple-icon-76x76.png"><link rel="apple-touch-icon" sizes="114x114" href="/docs/images/favicon/apple-icon-114x114.png"><link rel="apple-touch-icon" sizes="120x120" href="/docs/images/favicon/apple-icon-120x120.png"><link rel="apple-touch-icon" sizes="144x144" href="/docs/images/favicon/apple-icon-144x144.png"><link rel="apple-touch-icon" sizes="152x152" href="/docs/images/favicon/apple-icon-152x152.png"><link rel="apple-touch-icon" sizes="180x180" href="/docs/images/favicon/apple-icon-180x180.png"><link rel="icon" type="image/png" sizes="192x192" href="/docs/images/favicon/android-icon-192x192.png"><link rel="icon" type="image/png" sizes="32x32" href="/docs/images/favicon/favicon-32x32.png"><link rel="icon" type="image/png" sizes="96x96" href="/docs/images/favicon/favicon-96x96.png"><link rel="icon" type="image/png" sizes="16x16" href="/docs/images/favicon/favicon-16x16.png"><link rel="manifest" href="/docs/images/favicon/manifest.json"><link rel="stylesheet" href="https://unpkg.com/purecss@1.0.1/build/pure-min.css" integrity="sha384-oAOxQR6DkCoMliIh8yFnu25d7Eq/PHS21PClpwjOTeU2jRSq11vu66rf90/cZr47" crossorigin="anonymous"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans"><link rel="stylesheet" href="/docs/css/github.css"><link rel="stylesheet" href="/docs/css/mongoose5.css"><link rel="stylesheet" href="/docs/css/carbonads.css"><meta name="msapplication-TileColor" content="#ffffff"><meta name="msapplication-TileImage" content="/docs/images/favicon/ms-icon-144x144.png"><meta name="theme-color" content="#ffffff"><link rel="stylesheet" href="/docs/css/inlinecpc.css"><script type="text/javascript" src="/docs/js/native.js"></script><style>p { line-height: 1.5em }
2+
</style></head><body><div id="layout"><div id="mobile-menu"><a class="menu-link" id="menuLink" href="#menu"><svg width="100%" height="100%" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></a><div id="mobile-logo-container"><a href="/"><img id="logo" src="/docs/images/mongoose5_62x30_transparent.png"><span class="logo-text">mongoose</span></a></div></div><div id="menu"><nav class="pure-menu"><div class="pure-menu-heading" id="logo-container"><a href="/"><img id="logo" src="/docs/images/mongoose5_62x30_transparent.png"><span class="logo-text">mongoose</span></a></div><ul class="pure-menu-list" id="navbar"><li class="pure-menu-horizontal pure-menu-item pure-menu-has-children pure-menu-allow-hover version"><a class="pure-menu-link" href="/docs/index.html">Version 8.14.1</a><ul class="pure-menu-children"><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/7.x/index.html">Version 7.8.6</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/6.x/index.html">Version 6.13.8</a></li></ul></li><li class="pure-menu-item search"><input id="search-input-nav" type="text" placeholder="Search"><button id="search-button-nav"><img src="/docs/images/search.svg"></button></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/index.html">Quick Start</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/guides.html">Guides</a><ul class="pure-menu-list"><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/guide.html">Schemas</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/schematypes.html">SchemaTypes</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/connections.html">Connections</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/models.html">Models</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/documents.html">Documents</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/subdocs.html">Subdocuments</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/queries.html">Queries</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/validation.html">Validation</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/middleware.html">Middleware</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/populate.html">Populate</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/discriminators.html">Discriminators</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/plugins.html">Plugins</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/timestamps.html">Timestamps</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/transactions.html">Transactions</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/typescript.html">TypeScript</a><ul class="pure-menu-list"><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/typescript/schemas.html">Schemas</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/typescript/statics-and-methods.html">Statics and Methods</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link selected" href="/docs/typescript/queries.html">Queries</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/typescript/query-helpers.html">Query Helpers</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/typescript/populate.html">Populate</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/typescript/subdocuments.html">Subdocuments</a></li></ul></li></ul></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/api/mongoose.html">API</a><ul class="pure-menu-list"><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/mongoose.html">Mongoose</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/schema.html">Schema</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/connection.html">Connection</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/document.html">Document</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/model.html">Model</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/query.html">Query</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/aggregate.html">Aggregate</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/schematype.html">SchemaType</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/api/virtualtype.html">VirtualType</a></li></ul></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/migrating_to_8.html">Migration Guide</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/compatibility.html">Version Compatibility</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/version-support.html">Version Support</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/faq.html">FAQ</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/further_reading.html">Further Reading</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/enterprise.html">For Enterprise</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/sponsors.html" >Sponsors</a></li></ul><div class="cpc-ad"><script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CKYIL27I&placement=mongoosejscom" id="_carbonads_js"></script></div></nav></div><div class="container"><div id="content"><a class="edit-docs-link" href="https://github.com/Automattic/mongoose/blob/master/docs/typescript/queries.md" target="_blank">
3+
<img src="/docs/images/pencil.svg" />
4+
</a><h1 id="queries-in-typescript">
5+
<a href="#queries-in-typescript">
6+
Queries in TypeScript
7+
</a>
8+
</h1>
9+
<div class="sponsored-ad">
10+
<a href="https://localizejs.com/?utm_campaign=Mongoose&utm_source=mongoose&utm_medium=banner">
11+
<img src="/docs/images/localize-mongoose-ad-banner-2x.jpg">
12+
</a>
13+
</div>
14+
15+
<p>Mongoose&#39;s <a href="../api/query.html">Query class</a> is a chainable query builder that represents a MongoDB query.
16+
When you call <code>find()</code>, <code>findOne()</code>, <code>updateOne()</code>, <code>findOneAndUpdate()</code>, etc. on a model, Mongoose will return a Query instance.
17+
Queries have a <code>.then()</code> function that returns a Promise, so you can use them with <code>await</code>.</p>
18+
<p>In TypeScript, the Query class takes the following generic parameters:</p>
19+
<pre><code lang="ts"><span class="hljs-keyword">class</span> <span class="hljs-title class_">Query</span>&lt;
20+
<span class="hljs-title class_">ResultType</span>, <span class="hljs-comment">// The type of the result of the query, like `DocType[]`</span>
21+
<span class="hljs-title class_">DocType</span>, <span class="hljs-comment">// The hydrated document type of the query&#x27;s associated model</span>
22+
<span class="hljs-title class_">THelpers</span> = {}, <span class="hljs-comment">// Query helpers</span>
23+
<span class="hljs-title class_">RawDocType</span> = <span class="hljs-built_in">unknown</span>, <span class="hljs-comment">// The &quot;lean&quot; document type of the query&#x27;s associated model</span>
24+
<span class="hljs-title class_">QueryOp</span> = <span class="hljs-string">&#x27;find&#x27;</span>, <span class="hljs-comment">// The operation that will be executed, like &#x27;find&#x27;, &#x27;findOne&#x27;, &#x27;updateOne&#x27;, etc.</span>
25+
<span class="hljs-title class_">TDocOverrides</span> = <span class="hljs-title class_">Record</span>&lt;<span class="hljs-built_in">string</span>, <span class="hljs-built_in">never</span>&gt; <span class="hljs-comment">// Methods and virtuals on the hydrated document</span>
26+
&gt;</code></pre><h2 id="using-lean-in-typescript">
27+
<a href="#using-lean-in-typescript">
28+
Using <code>lean()</code> in TypeScript
29+
</a>
30+
</h2>
31+
<p>The <a href="../tutorials/lean.html"><code>lean()</code> method</a> tells Mongoose to skip <a href="../api/model.html#model_Model-hydrate">hydrating</a> the result documents, making queries faster and more memory efficient.
32+
<code>lean()</code> comes with some caveats in TypeScript when working with the query <code>transform()</code> function.
33+
In general, we recommend calling <code>lean()</code> before using the <code>transform()</code> function to ensure accurate types.</p>
34+
<pre><code lang="ts"><span class="hljs-comment">// Put `lean()` **before** `transform()` in TypeScript because `transform` modifies the query ResultType into a shape</span>
35+
<span class="hljs-comment">// that `lean()` does not know how to handle.</span>
36+
<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> <span class="hljs-title class_">ProjectModel</span>
37+
.<span class="hljs-title function_">find</span>()
38+
.<span class="hljs-title function_">lean</span>()
39+
.<span class="hljs-title function_">transform</span>(<span class="hljs-function">(<span class="hljs-params">docs</span>) =&gt;</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Map</span>(docs.<span class="hljs-title function_">map</span>(<span class="hljs-function">(<span class="hljs-params">doc</span>) =&gt;</span> [doc.<span class="hljs-property">_id</span>.<span class="hljs-title function_">toString</span>(), doc])));
40+
41+
<span class="hljs-comment">// Do **not** do the following</span>
42+
<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> <span class="hljs-title class_">ProjectModel</span>
43+
.<span class="hljs-title function_">find</span>()
44+
.<span class="hljs-title function_">transform</span>(<span class="hljs-function">(<span class="hljs-params">docs</span>) =&gt;</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Map</span>(docs.<span class="hljs-title function_">map</span>(<span class="hljs-function">(<span class="hljs-params">doc</span>) =&gt;</span> [doc.<span class="hljs-property">_id</span>.<span class="hljs-title function_">toString</span>(), doc])))
45+
.<span class="hljs-title function_">lean</span>();</code></pre><p>In general, if you&#39;re having trouble with <code>lean()</code> inferring the correct type, you can try moving <code>lean()</code> earlier in the query chain.</p>
46+
</div></div><div id="jobs"><div class="job-listing"><a href="/docs/jobs.html#61f0b0402d893554bc3a247f"><div class="company-logo"><img src="https://assets.localizecdn.com/uploads/1689251999716.png"></div><div class="description"><div class="company">Localize</div><div class="title">Full Stack Engineer</div><div class="location">Anywhere</div></div></a></div><div class="button jobs-view-more"><a href="/docs/jobs.html">View more jobs!</a></div></div><script type="text/javascript" src="/docs/js/navbar-search.js"></script><script type="text/javascript" src="/docs/js/mobile-navbar-toggle.js"></script></div></body></html>

0 commit comments

Comments
 (0)