mirror of
https://github.com/strapi/strapi.git
synced 2025-12-10 14:34:22 +00:00
312 lines
58 KiB
HTML
312 lines
58 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en-US">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>Query Interface | Strapi Docs</title>
|
|
<meta name="description" content="API creation made simple, secure and fast.">
|
|
|
|
|
|
<link rel="preload" href="/documentation/assets/css/styles.a8210063.css" as="style"><link rel="preload" href="/documentation/assets/js/app.a8210063.js" as="script"><link rel="preload" href="/documentation/assets/js/17.1c93d494.js" as="script"><link rel="prefetch" href="/documentation/assets/js/28.9b077c15.js"><link rel="prefetch" href="/documentation/assets/css/1.styles.77d89b12.css"><link rel="prefetch" href="/documentation/assets/js/1.77d89b12.js"><link rel="prefetch" href="/documentation/assets/css/2.styles.08038ddb.css"><link rel="prefetch" href="/documentation/assets/js/2.08038ddb.js"><link rel="prefetch" href="/documentation/assets/js/3.4d92d5e3.js"><link rel="prefetch" href="/documentation/assets/js/4.385ae6a0.js"><link rel="prefetch" href="/documentation/assets/js/5.edd21cb3.js"><link rel="prefetch" href="/documentation/assets/js/6.fd6e4b24.js"><link rel="prefetch" href="/documentation/assets/js/7.e1f45fa9.js"><link rel="prefetch" href="/documentation/assets/js/8.dc78e1c2.js"><link rel="prefetch" href="/documentation/assets/js/9.fd6a21e6.js"><link rel="prefetch" href="/documentation/assets/js/10.f9e7d997.js"><link rel="prefetch" href="/documentation/assets/js/11.bfb9de0f.js"><link rel="prefetch" href="/documentation/assets/js/12.124227d1.js"><link rel="prefetch" href="/documentation/assets/js/13.d8092700.js"><link rel="prefetch" href="/documentation/assets/js/14.7cfd4cb8.js"><link rel="prefetch" href="/documentation/assets/js/15.55a20f7c.js"><link rel="prefetch" href="/documentation/assets/js/16.5c84c402.js"><link rel="prefetch" href="/documentation/assets/js/18.e1f1758f.js"><link rel="prefetch" href="/documentation/assets/js/19.8d1b00cd.js"><link rel="prefetch" href="/documentation/assets/js/20.856d7bdd.js"><link rel="prefetch" href="/documentation/assets/js/21.6f851286.js"><link rel="prefetch" href="/documentation/assets/js/22.7ddb4e1d.js"><link rel="prefetch" href="/documentation/assets/js/23.15e5a0c3.js"><link rel="prefetch" href="/documentation/assets/js/24.6fdf34d0.js"><link rel="prefetch" href="/documentation/assets/js/25.21c9a549.js"><link rel="prefetch" href="/documentation/assets/js/26.6608295c.js"><link rel="prefetch" href="/documentation/assets/js/27.2c9596ea.js"><link rel="prefetch" href="/documentation/assets/js/29.8ea8ecc1.js"><link rel="prefetch" href="/documentation/assets/js/30.5d2829b8.js"><link rel="prefetch" href="/documentation/assets/js/31.fad00a3a.js"><link rel="prefetch" href="/documentation/assets/js/32.a6900221.js"><link rel="prefetch" href="/documentation/assets/js/33.bbfb3084.js"><link rel="prefetch" href="/documentation/assets/js/34.0eb2f8aa.js"><link rel="prefetch" href="/documentation/assets/js/35.76c29241.js"><link rel="prefetch" href="/documentation/assets/js/36.dfcc07a1.js"><link rel="prefetch" href="/documentation/assets/js/37.173a8112.js"><link rel="prefetch" href="/documentation/assets/js/38.b86fac79.js"><link rel="prefetch" href="/documentation/assets/js/39.a7d50afe.js"><link rel="prefetch" href="/documentation/assets/js/40.0415492d.js"><link rel="prefetch" href="/documentation/assets/js/41.5ef681df.js"><link rel="prefetch" href="/documentation/assets/js/42.fdd80522.js"><link rel="prefetch" href="/documentation/assets/js/43.03b496f2.js"><link rel="prefetch" href="/documentation/assets/js/44.3f55a367.js"><link rel="prefetch" href="/documentation/assets/js/45.6746c3dc.js"><link rel="prefetch" href="/documentation/assets/js/46.ff6bc353.js"><link rel="prefetch" href="/documentation/assets/js/47.53b7147a.js"><link rel="prefetch" href="/documentation/assets/js/48.31a883aa.js"><link rel="prefetch" href="/documentation/assets/js/49.18bd1a60.js"><link rel="prefetch" href="/documentation/assets/js/50.9b6079cd.js"><link rel="prefetch" href="/documentation/assets/js/51.b67aee1b.js"><link rel="prefetch" href="/documentation/assets/js/52.62bc63b6.js"><link rel="prefetch" href="/documentation/assets/js/53.2c567c55.js"><link rel="prefetch" href="/documentation/assets/js/54.6cc10d25.js"><link rel="prefetch" href="/documentation/assets/js/55.7faca13f.js"><link rel="prefetch" href="/documentation/assets/js/56.0b06ad54.js"><link rel="prefetch" href="/documentation/assets/js/57.a87c48df.js"><link rel="prefetch" href="/documentation/assets/js/58.1c6547d9.js"><link rel="prefetch" href="/documentation/assets/js/59.06f908d7.js"><link rel="prefetch" href="/documentation/assets/js/60.b5156b8d.js"><link rel="prefetch" href="/documentation/assets/js/61.1d5cafa9.js"><link rel="prefetch" href="/documentation/assets/js/62.ccacebe2.js"><link rel="prefetch" href="/documentation/assets/js/63.66946dde.js"><link rel="prefetch" href="/documentation/assets/js/64.d53bdeb7.js"><link rel="prefetch" href="/documentation/assets/js/65.0cd2da1f.js"><link rel="prefetch" href="/documentation/assets/js/66.03059dce.js"><link rel="prefetch" href="/documentation/assets/js/67.6f988923.js"><link rel="prefetch" href="/documentation/assets/js/68.303c1a05.js"><link rel="prefetch" href="/documentation/assets/js/69.3f4ed952.js"><link rel="prefetch" href="/documentation/assets/js/70.531d76be.js"><link rel="prefetch" href="/documentation/assets/js/71.ab3e74fc.js">
|
|
<link rel="stylesheet" href="/documentation/assets/css/styles.a8210063.css"><link rel="stylesheet" href="/documentation/assets/css/1.styles.77d89b12.css"><link rel="stylesheet" href="/documentation/assets/css/2.styles.08038ddb.css">
|
|
</head>
|
|
<body>
|
|
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/documentation/" class="home-link router-link-active"><!----> <span class="site-name">
|
|
Strapi Docs
|
|
</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"> <a href="https://github.com/strapi/strapi" target="_blank" rel="noopener noreferrer" class="repo-link">
|
|
GitHub
|
|
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar"><nav class="nav-links"> <a href="https://github.com/strapi/strapi" target="_blank" rel="noopener noreferrer" class="repo-link">
|
|
GitHub
|
|
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <div><select class="version-selector"><option value="/3.x.x/">Version 3.x.x</option><option value="/1.x.x/" selected="selected">Version 1.x.x</option></select></div> <ul class="sidebar-links"><li><div class="sidebar-group first"><p class="sidebar-heading open"><span>UsefulLinks</span> <!----></p> <ul class="sidebar-group-items"><li><a href="/documentation/1.x.x/" class="sidebar-link">Introduction</a></li><li><a href="https://strapi.io" class="sidebar-link">Strapi Website</a></li><li><a href="https://github.com/strapi/strapi" class="sidebar-link">GitHub Repository</a></li><li><a href="https://github.com/strapi/strapi/blob/master/CONTRIBUTING.md" class="sidebar-link">Contribution Guide</a></li></ul></div></li><li><a href="/documentation/1.x.x/admin.html" class="sidebar-link">Admin</a></li><li><a href="/documentation/1.x.x/configuration.html" class="sidebar-link">Configuration</a></li><li><a href="/documentation/1.x.x/email.html" class="sidebar-link">Email</a></li><li><a href="/documentation/1.x.x/introduction.html" class="sidebar-link">Introduction</a></li><li><a href="/documentation/1.x.x/queries.html" class="active sidebar-link">Query Interface</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/documentation/1.x.x/queries.html#query-methods" class="sidebar-link">Query Methods</a></li><li class="sidebar-sub-header"><a href="/documentation/1.x.x/queries.html#query-language" class="sidebar-link">Query Language</a></li></ul></li><li><a href="/documentation/1.x.x/response.html" class="sidebar-link">Response</a></li><li><a href="/documentation/1.x.x/sessions.html" class="sidebar-link">Sessions</a></li><li><a href="/documentation/1.x.x/testing.html" class="sidebar-link">Testing</a></li><li><a href="/documentation/1.x.x/views.html" class="sidebar-link">Views</a></li><li><a href="/documentation/1.x.x/blueprints.html" class="sidebar-link">Blueprints</a></li><li><a href="/documentation/1.x.x/context.html" class="sidebar-link">Context</a></li><li><a href="/documentation/1.x.x/graphql.html" class="sidebar-link">GraphQL</a></li><li><a href="/documentation/1.x.x/logging.html" class="sidebar-link">Logging</a></li><li><a href="/documentation/1.x.x/router.html" class="sidebar-link">Router</a></li><li><a href="/documentation/1.x.x/upload.html" class="sidebar-link">Upload</a></li><li><a href="/documentation/1.x.x/cli.html" class="sidebar-link">CLI</a></li><li><a href="/documentation/1.x.x/customization.html" class="sidebar-link">Customization</a></li><li><a href="/documentation/1.x.x/internationalization.html" class="sidebar-link">Internationalization</a></li><li><a href="/documentation/1.x.x/models.html" class="sidebar-link">Models</a></li><li><a href="/documentation/1.x.x/request.html" class="sidebar-link">Request</a></li><li><a href="/documentation/1.x.x/services.html" class="sidebar-link">Services</a></li><li><a href="/documentation/1.x.x/users.html" class="sidebar-link">Users</a></li></ul> </div> <div class="page"><div class="content"><h1 id="query-interface"><a href="#query-interface" aria-hidden="true" class="header-anchor">#</a> Query Interface</h1> <p>The Waterline Query Interface allows you to interact with your models the same
|
|
way no matter which adapter they are using. This means you can use the same Query
|
|
Language whether your data lives in MySQL, MongoDB, PostgreSQL, etc.</p> <h2 id="query-methods"><a href="#query-methods" aria-hidden="true" class="header-anchor">#</a> Query Methods</h2> <p>Every model in Waterline will have a set of query methods exposed on it to allow
|
|
you to interact with the database in a normalized fashion.
|
|
These are known as the CRUD (<code>Create</code>, <code>Read</code>, <code>Update</code> and <code>Delete</code>) methods and
|
|
is the primary way of interacting with your data.</p> <p>There are also a special set of queries known as <em>dynamic queries</em>.
|
|
These are special class methods that are dynamically generated when you initialize Waterline.
|
|
We call them dynamic finders. They perform many of the same functions as the other class
|
|
methods but you can call them directly on an attribute in your model.</p> <p>For most class methods, the callback parameter is optional and if one is not supplied,
|
|
it will return a chainable object.</p> <h3 id="find-criteria-callback"><a href="#find-criteria-callback" aria-hidden="true" class="header-anchor">#</a> .find(criteria, [callback])</h3> <p><code>find</code> will return an array of records that match the supplied criteria.
|
|
Criteria can be built using the Query Language.</p> <ul><li>The <code>criteria</code> is required and accepts <code>{}</code>, <code>[{}]</code>, <code>string</code> and <code>int</code> data types.</li> <li>The <code>callback</code> function is optional.</li></ul> <p>Any string arguments passed must be the ID of the record.
|
|
This method will always return records in an array.
|
|
If you are trying to find an attribute that is an array, you must wrap it in an additional
|
|
set of brackets otherwise Waterline will think you want to perform an <code>inQuery</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'Walter Jr'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span>
|
|
<span class="token punctuation">.</span><span class="token function">exec</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>err<span class="token punctuation">,</span> users<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>users<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h3 id="findone-criteria-callback"><a href="#findone-criteria-callback" aria-hidden="true" class="header-anchor">#</a> .findOne(criteria, [callback])</h3> <p><code>findOne</code> will return an object with the first matching result in the data store.</p> <ul><li>The <code>criteria</code> is required and accepts <code>{}</code>, <code>[{}]</code>, <code>string</code> and <code>int</code> data types.</li> <li>The <code>callback</code> function is optional.</li></ul> <p>Any string arguments passed must be the ID of the record.
|
|
If you are trying to find an attribute that is an array, you must wrap it in an additional
|
|
set of brackets otherwise Waterline will think you want to perform an <code>inQuery</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">findOne</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'Walter Jr'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span>
|
|
<span class="token punctuation">.</span><span class="token function">exec</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>err<span class="token punctuation">,</span> user<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h3 id="create-criteria-callback"><a href="#create-criteria-callback" aria-hidden="true" class="header-anchor">#</a> .create(criteria, [callback])</h3> <p><code>create</code> will attempt to create a new record in the datastore.
|
|
If the data is valid and passes all validations it will be sent to the adapters <code>create</code> method.</p> <ul><li>The <code>criteria</code> is required and accepts <code>{}</code> and <code>[{}]</code> data types.</li> <li>The <code>callback</code> function is optional.</li></ul> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'Walter Jr'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span>
|
|
<span class="token punctuation">.</span><span class="token function">exec</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>err<span class="token punctuation">,</span> user<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h3 id="findorcreate-criteria-values-callback"><a href="#findorcreate-criteria-values-callback" aria-hidden="true" class="header-anchor">#</a> .findOrCreate(criteria, [values, callback])</h3> <p><code>findOrCreate</code> will return a single record if one was found or created,
|
|
or an array of records if multiple get found/created via the supplied criteria or values.
|
|
Criteria can be built using the Query Language.</p> <ul><li>The <code>criteria</code> is required and accepts <code>{}</code>, <code>[{}]</code>, <code>string</code> and <code>int</code> data types.</li> <li>The <code>values</code> is optional and accepts <code>{}</code> and <code>[{}]</code> data types.</li> <li>The <code>callback</code> function is optional.</li></ul> <p>Any string arguments passed must be the ID of the record.
|
|
This method can return a single record or an array of records.
|
|
If a model is not found and creation values are omitted, it will get created with the supplied criteria values.</p> <p>Unless an adapter implements its own version of <code>findOrCreate</code>, <code>findOrCreate</code> will do the
|
|
<code>find</code> and <code>create</code> calls in two separate steps (not transactional).
|
|
In a high frequency scenario it's possible for duplicates to be created if the query field(s) are not indexed.</p> <p>Either user(s) with the name "Walter Jr" get returned or
|
|
a single user gets created with the name "Walter Jr" and returned:</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">findOrCreate</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'Walter Jr'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span>
|
|
<span class="token punctuation">.</span><span class="token function">exec</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>err<span class="token punctuation">,</span> users<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>users<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h3 id="update-search-criteria-values-callback"><a href="#update-search-criteria-values-callback" aria-hidden="true" class="header-anchor">#</a> .update(search criteria, values, [callback])</h3> <p><code>update</code> will attempt to update any records matching the criteria passed in.
|
|
Criteria can be built using the Query Language.</p> <ul><li>The <code>criteria</code> is required and accepts <code>{}</code>, <code>[{}]</code>, <code>string</code> and <code>int</code> data types.</li> <li>The <code>values</code> is required and accepts <code>{}</code> and <code>[{}]</code> data types.</li> <li>The <code>callback</code> function is optional.</li></ul> <p>Although you may pass <code>.update()</code> an object or an array of objects,
|
|
it will always return an array of objects. Any string arguments passed must be the ID
|
|
of the record. If you specify a primary key instead of a criteria object,
|
|
any <code>.where()</code> filters will be ignored.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">update</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'Walter Jr'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'Flynn'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span>
|
|
<span class="token punctuation">.</span><span class="token function">exec</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>err<span class="token punctuation">,</span> user<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h3 id="destroy-criteria-callback"><a href="#destroy-criteria-callback" aria-hidden="true" class="header-anchor">#</a> .destroy(criteria, [callback])</h3> <p><code>destroy</code> will destroy any records matching the provided criteria.
|
|
Criteria can be built using the Query Language.</p> <ul><li>The <code>criteria</code> is required and accepts <code>{}</code>, <code>[{}]</code>, <code>string</code> and <code>int</code> data types.</li> <li>The <code>callback</code> function is optional.</li></ul> <p>If you want to confirm the record exists before you delete it,
|
|
you must first perform a <code>.find()</code>. Any string arguments passed must be the ID of the record.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">destroy</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'Flynn'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span>
|
|
<span class="token punctuation">.</span><span class="token function">exec</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h3 id="query-query-data-callback"><a href="#query-query-data-callback" aria-hidden="true" class="header-anchor">#</a> .query(query, [data], callback)</h3> <p>Some adapters, such as <code>sails-mysql</code> and <code>sails-postgresql</code>, support the query function
|
|
which will run the provided RAW query against the database.
|
|
This can sometimes be useful if you want to run complex queries and performance is very important.</p> <ul><li>The <code>query</code> is required and accepts <code>string</code> data types.</li> <li>The <code>data</code> is optional and accepts <code>array</code> data types.</li> <li>The <code>callback</code> function is required.</li></ul> <p>The type of the results returned depend on your adapter: <code>sails-mysql</code> returns an array of objects
|
|
and <code>sails-postgresql</code> returns an object containing metadata and the actual results within a 'rows' array.
|
|
This function does currently not support promises.</p> <p>Using PostgreSQL:</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">const</span> title <span class="token operator">=</span> <span class="token string">"The King's Speech"</span><span class="token punctuation">;</span>
|
|
Movie<span class="token punctuation">.</span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">'SELECT * FROM movie WHERE title = $1'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>title<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>err<span class="token punctuation">,</span> results<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Found the following movie: '</span><span class="token punctuation">,</span> results<span class="token punctuation">.</span>rows<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><p>Using MySQL:</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">const</span> title <span class="token operator">=</span> <span class="token string">"The King's Speech"</span><span class="token punctuation">;</span>
|
|
Movie<span class="token punctuation">.</span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">'SELECT * FROM movie WHERE title = $1'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>title<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>err<span class="token punctuation">,</span> results<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Found the following movie: '</span><span class="token punctuation">,</span> results<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h2 id="query-language"><a href="#query-language" aria-hidden="true" class="header-anchor">#</a> Query Language</h2> <p>The Waterline Query Language is an object based criteria used to retrieve the
|
|
records from any of the supported database adapters.
|
|
This allows you to change your database without changing your codebase.</p> <p>All queries inside of Waterline are case insensitive. This allows for easier querying
|
|
but makes indexing strings tough. This is something to be aware of if you are
|
|
indexing and searching on string fields.</p> <h3 id="query-language-basics"><a href="#query-language-basics" aria-hidden="true" class="header-anchor">#</a> Query Language Basics</h3> <p>The criteria objects are formed using one of four types of object keys.
|
|
These are the top level keys used in a query object. It is loosely based on the
|
|
criteria used in MongoDB with a few slight variations.</p> <p>Queries can be built using either a <code>where</code> key to specify attributes,
|
|
which will allow you to also use query options such as <code>limit</code> and <code>skip</code> or
|
|
if <code>where</code> is excluded the entire object will be treated as a <code>where</code> criteria.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
skip<span class="token punctuation">:</span> <span class="token number">20</span><span class="token punctuation">,</span>
|
|
limit<span class="token punctuation">:</span> <span class="token number">10</span><span class="token punctuation">,</span>
|
|
sort<span class="token punctuation">:</span> <span class="token string">'name DESC'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><p>Or:</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="key-pairs"><a href="#key-pairs" aria-hidden="true" class="header-anchor">#</a> Key Pairs</h4> <p>A key pair can be used to search records for values matching exactly what is specified.
|
|
This is the base of a criteria object where the key represents an attribute on a model
|
|
and the value is a strict equality check of the records for matching values.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><p>They can be used together to search multiple attributes:</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span><span class="token punctuation">,</span>
|
|
country<span class="token punctuation">:</span> <span class="token string">'France'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="modified-pairs"><a href="#modified-pairs" aria-hidden="true" class="header-anchor">#</a> Modified Pairs</h4> <p>Modified pairs also have model attributes for keys but they also use any of the
|
|
supported criteria modifiers to perform queries where a strict equality check wouldn't work.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
contains<span class="token punctuation">:</span> <span class="token string">'alt'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span>
|
|
</code></pre></div><h4 id="in-pairs"><a href="#in-pairs" aria-hidden="true" class="header-anchor">#</a> In Pairs</h4> <p>In queries work similarly to MySQL <code>in</code> queries. Each element in the array is treated as <code>or</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'John'</span><span class="token punctuation">,</span> <span class="token string">'Walter'</span><span class="token punctuation">]</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="not-in-pairs"><a href="#not-in-pairs" aria-hidden="true" class="header-anchor">#</a> Not-In Pairs</h4> <p>Not-In queries work similar to <code>in</code> queries, except for the nested object criteria.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'!'</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'John'</span><span class="token punctuation">,</span> <span class="token string">'Walter'</span><span class="token punctuation">]</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="or-pairs"><a href="#or-pairs" aria-hidden="true" class="header-anchor">#</a> Or Pairs</h4> <p>Performing <code>OR</code> queries is done by using an array of query pairs.
|
|
Results will be returned that match any of the criteria objects inside the array.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
or<span class="token punctuation">:</span> <span class="token punctuation">[</span>
|
|
<span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
<span class="token punctuation">{</span>
|
|
occupation<span class="token punctuation">:</span> <span class="token string">'Developer'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">]</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h3 id="criteria-modifiers"><a href="#criteria-modifiers" aria-hidden="true" class="header-anchor">#</a> Criteria Modifiers</h3> <p>The following modifiers are available to use when building queries:</p> <ul><li><code><</code> or <code>lessThan</code></li> <li><code><=</code> or <code>lessThanOrEqual</code></li> <li><code>></code> or <code>greaterThan</code></li> <li><code>>=</code> or <code>greaterThanOrEqual</code></li> <li><code>!</code> or <code>not</code></li> <li><code>like</code></li> <li><code>contains</code></li> <li><code>startsWith</code></li> <li><code>endsWith</code></li></ul> <h4 id="or-lessthan"><a href="#or-lessthan" aria-hidden="true" class="header-anchor">#</a> < or lessThan</h4> <p>Searches for records where the value is less than the value specified.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
age<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'<'</span><span class="token punctuation">:</span> <span class="token number">30</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="or-lessthanorequal"><a href="#or-lessthanorequal" aria-hidden="true" class="header-anchor">#</a> <= or lessThanOrEqual</h4> <p>Searches for records where the value is less or equal to the value specified.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
age<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'<='</span><span class="token punctuation">:</span> <span class="token number">21</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="or-greaterthan"><a href="#or-greaterthan" aria-hidden="true" class="header-anchor">#</a> > or greaterThan</h4> <p>Searches for records where the value is more than the value specified.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
age<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'>'</span><span class="token punctuation">:</span> <span class="token number">18</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="or-greaterthanorequal"><a href="#or-greaterthanorequal" aria-hidden="true" class="header-anchor">#</a> >= or greaterThanOrEqual</h4> <p>Searches for records where the value is more or equal to the value specified.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
age<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'>='</span><span class="token punctuation">:</span> <span class="token number">21</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="or-not"><a href="#or-not" aria-hidden="true" class="header-anchor">#</a> ! or not</h4> <p>Searches for records where the value is not equal to the value specified.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'!'</span><span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="like"><a href="#like" aria-hidden="true" class="header-anchor">#</a> like</h4> <p>Searches for records using pattern matching with the <code>%</code> sign.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
food<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'like'</span><span class="token punctuation">:</span> <span class="token string">'%burgers'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="contains"><a href="#contains" aria-hidden="true" class="header-anchor">#</a> contains</h4> <p>A shorthand for pattern matching both sides of a string.
|
|
Will return records where the value contains the string anywhere inside of it.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
<span class="token keyword">class</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'like'</span><span class="token punctuation">:</span> <span class="token string">'%history%'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
<span class="token keyword">class</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'contains'</span><span class="token punctuation">:</span> <span class="token string">'history'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="startswith"><a href="#startswith" aria-hidden="true" class="header-anchor">#</a> startsWith</h4> <p>A shorthand for pattern matching the right side of a string
|
|
Will return records where the value starts with the supplied string value.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
<span class="token keyword">class</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'startsWith'</span><span class="token punctuation">:</span> <span class="token string">'french'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
<span class="token keyword">class</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'like'</span><span class="token punctuation">:</span> <span class="token string">'french%'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="endswith"><a href="#endswith" aria-hidden="true" class="header-anchor">#</a> endsWith</h4> <p>A shorthand for pattern matching the left side of a string.
|
|
Will return records where the value ends with the supplied string value.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
<span class="token keyword">class</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'endsWith'</span><span class="token punctuation">:</span> <span class="token string">'can'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
<span class="token keyword">class</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'like'</span><span class="token punctuation">:</span> <span class="token string">'%can'</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="date-ranges"><a href="#date-ranges" aria-hidden="true" class="header-anchor">#</a> Date Ranges</h4> <p>You can do date range queries using the comparison operators.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
date<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'>'</span><span class="token punctuation">:</span> <span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'2/4/2014'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
|
|
<span class="token string">'<'</span><span class="token punctuation">:</span> <span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token string">'2/7/2014'</span><span class="token punctuation">)</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h3 id="query-options"><a href="#query-options" aria-hidden="true" class="header-anchor">#</a> Query Options</h3> <p>Query options allow you refine the results that are returned from a query.</p> <h4 id="limit-results"><a href="#limit-results" aria-hidden="true" class="header-anchor">#</a> Limit results</h4> <p>Limit the number of results returned from a query.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
limit<span class="token punctuation">:</span> <span class="token number">20</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="skip-results"><a href="#skip-results" aria-hidden="true" class="header-anchor">#</a> Skip results</h4> <p>Return all the results excluding the number of items to skip.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
skip<span class="token punctuation">:</span> <span class="token number">10</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="pagination"><a href="#pagination" aria-hidden="true" class="header-anchor">#</a> Pagination</h4> <p><code>skip</code> and <code>limit</code> can be used together to build up a pagination system.</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
limit<span class="token punctuation">:</span> <span class="token number">10</span><span class="token punctuation">,</span>
|
|
skip<span class="token punctuation">:</span> <span class="token number">10</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="sort-results"><a href="#sort-results" aria-hidden="true" class="header-anchor">#</a> Sort results</h4> <p>Results can be sorted by attribute name. Simply specify an attribute name for
|
|
natural (ascending) sort, or specify an <code>asc</code> or <code>desc</code> flag for ascending or
|
|
descending orders respectively.</p> <p>Sort by name in ascending order:</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
sort<span class="token punctuation">:</span> <span class="token string">'name'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><p>Sort by name in descending order:</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
sort<span class="token punctuation">:</span> <span class="token string">'name DESC'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><p>Sort by name in ascending order:</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
sort<span class="token punctuation">:</span> <span class="token string">'name ASC'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><p>Sort by binary notation</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
sort<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token number">1</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><p>Sort by multiple attributes:</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token string">'John'</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
sort<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
name<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span>
|
|
age<span class="token punctuation">:</span> <span class="token number">0</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div><h4 id="select-a-field"><a href="#select-a-field" aria-hidden="true" class="header-anchor">#</a> Select a field</h4> <p>Apply a projection to a Waterline query.</p> <p>This example only returns the field name:</p> <div class="language-js extra-class"><pre class="language-js"><code>User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
|
|
where<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
age<span class="token punctuation">:</span> <span class="token punctuation">{</span>
|
|
<span class="token string">'<'</span><span class="token punctuation">:</span> <span class="token number">30</span>
|
|
<span class="token punctuation">}</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
select<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'name'</span><span class="token punctuation">]</span>
|
|
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
</code></pre></div></div> <div class="page-edit"><div class="edit-link"><a href="https://github.com/strapi/strapi/edit/master/docs/1.x.x/queries.md" target="_blank" rel="noopener noreferrer">Improve this page</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <!----></div> <div class="page-nav"><p class="inner"><span class="prev">
|
|
← <a href="/documentation/1.x.x/introduction.html" class="prev">
|
|
Introduction
|
|
</a></span> <span class="next"><a href="/documentation/1.x.x/response.html">
|
|
Response
|
|
</a> →
|
|
</span></p></div> </div></div></div>
|
|
<script src="/documentation/assets/js/17.1c93d494.js" defer></script><script src="/documentation/assets/js/app.a8210063.js" defer></script>
|
|
</body>
|
|
</html>
|