-
-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
- Loading branch information
Showing
90 changed files
with
18,330 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
<!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 v5.13.8: Advanced Schemas</title><link rel="apple-touch-icon" sizes="57x57" href="images/favicon/apple-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="images/favicon/apple-icon-60x60.png"><link rel="apple-touch-icon" sizes="72x72" href="images/favicon/apple-icon-72x72.png"><link rel="apple-touch-icon" sizes="76x76" href="images/favicon/apple-icon-76x76.png"><link rel="apple-touch-icon" sizes="114x114" href="images/favicon/apple-icon-114x114.png"><link rel="apple-touch-icon" sizes="120x120" href="images/favicon/apple-icon-120x120.png"><link rel="apple-touch-icon" sizes="144x144" href="images/favicon/apple-icon-144x144.png"><link rel="apple-touch-icon" sizes="152x152" href="images/favicon/apple-icon-152x152.png"><link rel="apple-touch-icon" sizes="180x180" href="images/favicon/apple-icon-180x180.png"><link rel="icon" type="image/png" sizes="192x192" href="images/favicon/android-icon-192x192.png"><link rel="icon" type="image/png" sizes="32x32" href="images/favicon/favicon-32x32.png"><link rel="icon" type="image/png" sizes="96x96" href="images/favicon/favicon-96x96.png"><link rel="icon" type="image/png" sizes="16x16" href="images/favicon/favicon-16x16.png"><link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css" integrity="sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w" 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="apple-touch-icon" sizes="57x57" href="images/favicon/apple-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="images/favicon/apple-icon-60x60.png"><link rel="apple-touch-icon" sizes="72x72" href="images/favicon/apple-icon-72x72.png"><link rel="apple-touch-icon" sizes="76x76" href="images/favicon/apple-icon-76x76.png"><link rel="apple-touch-icon" sizes="114x114" href="images/favicon/apple-icon-114x114.png"><link rel="apple-touch-icon" sizes="120x120" href="images/favicon/apple-icon-120x120.png"><link rel="apple-touch-icon" sizes="144x144" href="images/favicon/apple-icon-144x144.png"><link rel="apple-touch-icon" sizes="152x152" href="images/favicon/apple-icon-152x152.png"><link rel="apple-touch-icon" sizes="180x180" href="images/favicon/apple-icon-180x180.png"><link rel="icon" type="image/png" sizes="192x192" href="images/favicon/android-icon-192x192.png"><link rel="icon" type="image/png" sizes="32x32" href="images/favicon/favicon-32x32.png"><link rel="icon" type="image/png" sizes="96x96" href="images/favicon/favicon-96x96.png"><link rel="icon" type="image/png" sizes="16x16" href="images/favicon/favicon-16x16.png"><link rel="manifest" href="images/favicon/manifest.json"><meta name="msapplication-TileColor" content="#ffffff"><meta name="msapplication-TileImage" content="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 } | ||
</style></head><body><div id="layout"><div id="mobile-menu"><a class="menu-link" id="menuLink" href="#menu"><span></span></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"><div 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="#">Version 5.13.8</a><ul class="pure-menu-children"><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/4.x">Version 4.13.21</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/3.8.x">Version 3.8.40</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></li><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/transactions.html">Transactions</a></li><li class="pure-menu-item sub-item"><a class="pure-menu-link" href="/docs/typescript.html">TypeScript</a></li><li class="pure-menu-item"><a class="pure-menu-link" href="/docs/api.html">API</a></li><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><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/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/built-with-mongoose.html" >Built with Mongoose</a></li></ul><div class="cpc-ad"><script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?zoneid=1673&serve=C6AILKT&placement=mongoosejscom" id="_carbonads_js"></script></div></div></div><div class="container"><div id="content"><a class="edit-docs-link" href="https://github.com/Automattic/mongoose/blob/master/docs/advanced_schemas.md" target="_blank"> | ||
<img src="/docs/images/pencil.svg" /> | ||
</a><h2 id="advanced-schemas">Advanced Schemas</h2> | ||
<script> | ||
_native.init("CK7DT53U",{ | ||
targetClass: 'native-inline' | ||
}); | ||
</script> | ||
|
||
<div class="native-inline"> | ||
<a href="#native_link#"><span class="sponsor">Sponsor</span> #native_company# — #native_desc#</a> | ||
</div> | ||
|
||
<h3 id="creating-from-es6-classes-using-loadclass">Creating from ES6 Classes Using <code>loadClass()</code></h3> | ||
<p>Mongoose allows creating schemas from <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes">ES6 classes</a>. | ||
The <code>loadClass()</code> function lets you pull in methods, | ||
statics, and virtuals from an ES6 class. A class method maps to a schema | ||
method, a static method maps to a schema static, and getters/setters map | ||
to virtuals.</p> | ||
<pre><code class="language-javascript"><span class="hljs-keyword">const</span> schema = <span class="hljs-keyword">new</span> Schema({ <span class="hljs-attr">firstName</span>: <span class="hljs-built_in">String</span>, <span class="hljs-attr">lastName</span>: <span class="hljs-built_in">String</span> }); | ||
|
||
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PersonClass</span> </span>{ | ||
<span class="hljs-comment">// `fullName` becomes a virtual</span> | ||
<span class="hljs-keyword">get</span> fullName() { | ||
<span class="hljs-keyword">return</span> <span class="hljs-string">`<span class="hljs-subst">${<span class="hljs-keyword">this</span>.firstName}</span> <span class="hljs-subst">${<span class="hljs-keyword">this</span>.lastName}</span>`</span>; | ||
} | ||
|
||
<span class="hljs-keyword">set</span> fullName(v) { | ||
<span class="hljs-keyword">const</span> firstSpace = v.indexOf(<span class="hljs-string">' '</span>); | ||
<span class="hljs-keyword">this</span>.firstName = v.split(<span class="hljs-string">' '</span>)[<span class="hljs-number">0</span>]; | ||
<span class="hljs-keyword">this</span>.lastName = firstSpace === <span class="hljs-number">-1</span> ? <span class="hljs-string">''</span> : v.substr(firstSpace + <span class="hljs-number">1</span>); | ||
} | ||
|
||
<span class="hljs-comment">// `getFullName()` becomes a document method</span> | ||
getFullName() { | ||
<span class="hljs-keyword">return</span> <span class="hljs-string">`<span class="hljs-subst">${<span class="hljs-keyword">this</span>.firstName}</span> <span class="hljs-subst">${<span class="hljs-keyword">this</span>.lastName}</span>`</span>; | ||
} | ||
|
||
<span class="hljs-comment">// `findByFullName()` becomes a static</span> | ||
<span class="hljs-keyword">static</span> findByFullName(name) { | ||
<span class="hljs-keyword">const</span> firstSpace = name.indexOf(<span class="hljs-string">' '</span>); | ||
<span class="hljs-keyword">const</span> firstName = name.split(<span class="hljs-string">' '</span>)[<span class="hljs-number">0</span>]; | ||
<span class="hljs-keyword">const</span> lastName = firstSpace === <span class="hljs-number">-1</span> ? <span class="hljs-string">''</span> : name.substr(firstSpace + <span class="hljs-number">1</span>); | ||
<span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.findOne({ firstName, lastName }); | ||
} | ||
} | ||
|
||
schema.loadClass(PersonClass); | ||
<span class="hljs-keyword">const</span> Person = db.model(<span class="hljs-string">'Person'</span>, schema); | ||
|
||
Person.create({ <span class="hljs-attr">firstName</span>: <span class="hljs-string">'Jon'</span>, <span class="hljs-attr">lastName</span>: <span class="hljs-string">'Snow'</span> }). | ||
then(<span class="hljs-function"><span class="hljs-params">doc</span> =></span> { | ||
assert.equal(doc.fullName, <span class="hljs-string">'Jon Snow'</span>); | ||
doc.fullName = <span class="hljs-string">'Jon Stark'</span>; | ||
assert.equal(doc.firstName, <span class="hljs-string">'Jon'</span>); | ||
assert.equal(doc.lastName, <span class="hljs-string">'Stark'</span>); | ||
<span class="hljs-keyword">return</span> Person.findByFullName(<span class="hljs-string">'Jon Snow'</span>); | ||
}). | ||
then(<span class="hljs-function"><span class="hljs-params">doc</span> =></span> { | ||
assert.equal(doc.fullName, <span class="hljs-string">'Jon Snow'</span>); | ||
});</code></pre> | ||
</div></div><script type="text/javascript">var xhr = new XMLHttpRequest(); | ||
xhr.open('POST', 'https://g0a3nbw0xa.execute-api.us-east-1.amazonaws.com/prod/track', true); | ||
xhr.setRequestHeader('Content-Type', 'application/json'); | ||
xhr.onreadystatechange = function() {}; | ||
xhr.send(JSON.stringify({ | ||
path: window.location.pathname, | ||
hostname: window.location.hostname, | ||
hash: window.location.hash | ||
}));</script><script type="text/javascript" src="/docs/js/navbar-search.js"></script><script type="text/javascript">(function (window, document) { | ||
var layout = document.getElementById('layout'), | ||
menu = document.getElementById('menu'), | ||
menuLink = document.getElementById('menuLink'), | ||
content = document.getElementById('content'); | ||
|
||
function toggleClass(element, className) { | ||
var classes = element.className.split(/\s+/), | ||
length = classes.length, | ||
i = 0; | ||
|
||
for(; i < length; i++) { | ||
if (classes[i] === className) { | ||
classes.splice(i, 1); | ||
break; | ||
} | ||
} | ||
// The className is not found | ||
if (length === classes.length) { | ||
classes.push(className); | ||
} | ||
|
||
element.className = classes.join(' '); | ||
} | ||
|
||
function toggleAll(e) { | ||
var active = 'active'; | ||
|
||
e.preventDefault(); | ||
toggleClass(layout, active); | ||
toggleClass(menu, active); | ||
toggleClass(menuLink, active); | ||
} | ||
|
||
menuLink.onclick = function (e) { | ||
toggleAll(e); | ||
}; | ||
|
||
content.onclick = function(e) { | ||
if (menu.className.indexOf('active') !== -1) { | ||
toggleAll(e); | ||
} | ||
}; | ||
|
||
}(this, this.document));</script></div></body></html> |
Oops, something went wrong.