--- title: collections.Where linkTitle: where description: Filters an array to only the elements containing a matching value for a given field. categories: [functions] keywords: [] menu: docs: parent: functions function: aliases: [where] returnType: any signatures: ['collections.Where COLLECTION KEY [OPERATOR] MATCH'] relatedFunctions: - collections.Dictionary - collections.Group - collections.Index - collections.IsSet - collections.Where aliases: [/functions/where] toc: true --- `where` filters an array to only the elements containing a matching value for a given field. It works in a similar manner to the [`where` keyword in SQL][wherekeyword]. ```go-html-template {{ range where .Pages "Section" "foo" }} {{ .Content }} {{ end }} ``` It can be used by dot-chaining the second argument to refer to a nested element of a value. {{< code-toggle file="content/example.md" fm=true copy=false >}} title: Example series: golang {{< /code-toggle >}} ```go-html-template {{ 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 `=`. ```go-html-template {{ range where .Pages "Section" "!=" "foo" }} {{ .Content }} {{ end }} ``` The following logical operators are available 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][intersect]. `like` : `true` if a given field value matches a regular expression. Use the `like` operator to compare `string` values. Returns `false` when comparing other data types to the regular expression. ## Use `where` with boolean values When using booleans you should not put quotation marks. ```go-html-template {{ range where .Pages "Draft" true }}
{{ .Title }}
{{ end }} ``` ## Use `where` with `intersect` ```go-html-template {{ range where .Site.Pages "Params.tags" "intersect" .Params.tags }} {{ if ne .Permalink $.Permalink }} {{ .Render "summary" }} {{ end }} {{ end }} ``` You can also put the returned value of the `where` clauses into a variable: {{< code file="where-intersect-variables.html" >}} {{ $v1 := where .Site.Pages "Params.a" "v1" }} {{ $v2 := where .Site.Pages "Params.b" "v2" }} {{ $filtered := $v1 | intersect $v2 }} {{ range $filtered }} {{ end }} {{< /code >}} ## Use `where` with `like` This example matches pages where the "foo" parameter begins with "ab": ```go-html-template {{ range where site.RegularPages "Params.foo" "like" `^ab` }}