mirror of
https://github.com/tiennm99/hugoDocs.git
synced 2026-09-12 12:19:31 +00:00
101 lines
2.9 KiB
Markdown
101 lines
2.9 KiB
Markdown
---
|
|
title: where
|
|
linktitle: where
|
|
description: Filters an array to only the elements containing a matching value for a given field.
|
|
godocref:
|
|
date: 2017-02-01
|
|
publishdate: 2017-02-01
|
|
lastmod: 2017-02-01
|
|
categories: [functions]
|
|
tags: [filtering]
|
|
signature:
|
|
workson: [lists,taxonomies,terms,groups]
|
|
hugoversion:
|
|
relatedfuncs: [intersect,first]
|
|
deprecated: false
|
|
toc: true
|
|
needsexample: true
|
|
---
|
|
|
|
`where` filters an array to only the elements containing a matching value for a given field.
|
|
|
|
```golang
|
|
{{ range where .Data.Pages "Section" "post" }}
|
|
{{ .Content }}
|
|
{{ end }}
|
|
```
|
|
|
|
It can be used by dot-chaining the second argument to refer to a nested element of a value.
|
|
|
|
```toml
|
|
+++
|
|
series: golang
|
|
+++
|
|
```
|
|
|
|
```golang
|
|
{{ range where .Site.Pages "Params.series" "golang" }}
|
|
{{ .Content }}
|
|
{{ end }}
|
|
```
|
|
|
|
It can also be used with the logical operators `!=`, `>=`, `in`, etc. Without an operator, `where` compares a given field with a matching value equivalent to `=`.
|
|
|
|
```golang
|
|
{{ range where .Data.Pages "Section" "!=" "post" }}
|
|
{{ .Content }}
|
|
{{ end }}
|
|
```
|
|
|
|
The following logical operators are vailable with `where`:
|
|
|
|
* `=`, `==`, `eq`: True if a given field value equals a matching value
|
|
* `!=`, `<>`, `ne`: True if a given field value doesn't equal a matching value
|
|
* `>=`, `ge`: True if a given field value is greater than or equal to a matching value
|
|
* `>`, `gt`: True if a given field value is greater than a matching value
|
|
* `<=`, `le`: True if a given field value is lesser than or equal to a matching value
|
|
* `<`, `lt`: True if a given field value is lesser than a matching value
|
|
* `in`: True if a given field value is included in a matching value. A matching value must be an array or a slice
|
|
* `not in`: True if a given field value isn't included in a matching value. A matching value must be an array or a slice
|
|
* `intersect`: True if a given field value that is a slice / array of strings or integers contains elements in common with the matching value. It follows the same rules as the intersect function.
|
|
|
|
## Using `where` with `intersect`
|
|
|
|
```golang
|
|
{{ range where .Site.Pages ".Params.tags" "intersect" .Params.tags }}
|
|
{{ if ne .Permalink $.Permalink }}
|
|
{{ .Render "summary" }}
|
|
{{ end }}
|
|
{{ end }}
|
|
```
|
|
|
|
## Using `where` with `first`
|
|
|
|
```golang
|
|
{{ range first 5 (where .Data.Pages "Section" "post") }}
|
|
{{ .Content }}
|
|
{{ end }}
|
|
```
|
|
|
|
## Nesting `where` Clauses
|
|
|
|
**Needs Example**
|
|
|
|
## Unset Fields
|
|
|
|
Filtering only works for set fields. To check whether a field is set or exists, you can use the operand `nil`.
|
|
|
|
This can be useful to filter a small amount of pages from a large pool. Instead of set field on all pages, you can set field on required pages only.
|
|
|
|
Only the following operators are available for `nil`
|
|
|
|
* `=`, `==`, `eq`: True if the given field is not set.
|
|
* `!=`, `<>`, `ne`: True if the given field is set.
|
|
|
|
```golang
|
|
{{ range where .Data.Pages ".Params.specialpost" "!=" nil }}
|
|
{{ .Content }}
|
|
{{ end }}
|
|
```
|
|
|