title | description |
---|---|
queryContent() |
The queryContent composable provides methods for querying and fetching your contents. |
The queryContent()
composable provides methods for querying and fetching your contents.
Create a query builder to search contents.
// Create a query looking for anything in content/ directory
const contentQuery = queryContent()
// Create a query looking into content/articles directory
const contentQuery = queryContent('articles')
// Create a query looking into content/articles/nuxt3 directory
const contentQuery = queryContent('articles', 'nuxt3')
query
{lang=ts}:- Type:
Partial<QueryBuilderParams>
{lang=ts} - Required
- Type:
Filter results by query.
Where queries are based on subset of Mongo query syntax, it handles: $eq
{lang=ts}, $ne
{lang=ts}, $gt
{lang=ts}, $gte
{lang=ts}, $lt
{lang=ts}, $lte
{lang=ts} and $in
{lang=ts}
// Implicit (assumes $eq operator)
const articles = await queryContent('articles').where({ title: 'Home' }).findOne()
// Explicit $eq
const articles = await queryContent('articles').where({ title: { $eq: 'Home' } }).findOne()
// $gt
const articles = await queryContent('articles').where({ age: { $gt: 18 } }).find()
// $in
const articles = await queryContent('articles').where({ name: { $in: ['odin', 'thor'] } }).find()
In order to filter in objects and array you can use nested properties style:
const products = await queryContent('products').where({ 'categories': { $contains: 'top' } }).find()
const products = await queryContent('products').where({ 'categories': { $contains: ['top', 'woman'] } }).find()
options
{lang="ts"}- Type:
object
{lang="ts"} - Required
- Type:
Sort results by a field or fields.
// Sort by title ascending
const articles = await queryContent('articles')
.sort({ title: 1 })
.find()
// Sort by title ascending first then sort by category descending
const articles = await queryContent('articles')
.sort({ title: 1, category: 0 })
.find()
// OR
const articles = await queryContent('articles')
.sort({ title: 1 })
.sort({ category: 0 })
.find()
// Sort by nested field
const articles = await queryContent('articles')
.sort({ 'category.title': 1 })
.find()
sort()
{lang="ts"} method does case-sensitive sort by default. There is some magical options you can pass to sort options to change sort behavior, like sorting case-insensitive.
$sensitivity
{lang=ts}: Change case sensitivity. Like using$sensitivity: 'base'
{lang=ts} for case-insensitive sort$numeric
{lang=ts}: Whether numeric collation should be used, such that"1" < "2" < "10"
.$caseFirst
{lang=ts}: Whether upper case or lower case should sort first.
These options are given to Intl.Collator().
count
{lang="ts"}- Type:
Number
{lang="ts"} - Required
- Type:
Limit number of results.
// fetch only 5 articles
const articles = await queryContent('articles').limit(5).find()
count
{lang=ts}- Type:
Number
{lang=ts} - Required
- Type:
Skip results.
// fetch the next 5 articles
const articles = await queryContent('articles')
.skip(5)
.limit(5)
.find()
keys
{lang=ts}- Type:
Array
{lang=ts} orString
{lang=ts} - Required
- Type:
Remove a subset of fields.
const articles = await queryContent('articles').without('unused-key').find()
const articles = await queryContent('articles').without(['unused-key', 'another-unused-key']).find()
keys
{lang=ts}- Type:
Array
{lang=ts} orString
{lang=ts} - Required
- Type:
Select a subset of fields.
const articles = await queryContent('articles').only('id').find()
const articles = await queryContent('articles').only(['id', 'title']).find()
Fetch and return the list of matched contents based on the query.
// List of articles
const articles = await queryContent('articles').find()
Fetch first matched content.
const firstArticle = await queryContent('articles').findOne()
path
{lang=ts}- Type:
String
{lang=ts} - Required
- Type:
options
{lang=ts}- Type:
{ before: number, after: number }
{lang=ts} - Default:
{ before: 1, after: 1 }
{lang=ts}
- Type:
Get previous and next results around a specific path.
You will always obtain an array of fixed length filled with the matching document or null.
const [prev, next] = await queryContent('articles')
.only(['_path', 'title'])
.sort({ date: 1})
.where({ isArchived: false })
.findSurround('article-2')
// Returns
[
{
title: 'Article 1',
path: 'article-1'
},
null // no article-3 here
]