> For the complete documentation index, see [llms.txt](https://micheleriva.gitbook.io/unomi-node/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://micheleriva.gitbook.io/unomi-node/api/profile/query.md).

# Query

### Usage

```javascript
const params = {
  limit:        <int>,
  offset:       <int>,
  forceRefresh: <boolean>,
  operator:     <string>
}

const query = [
  {
    prop:     <string>,
    operator: <string>,
    value:    <string>
  }
]

unomi.profile.query(params, query);
```

### Response

```javascript
{
  "success": <boolean>,
  "status":  <int>,
  "data":    {
    "list": [<object>]
  }
}
```

### Valid Query Operators

* `all`
* `contains`
* `endsWith`
* `equals`
* `exists`
* `greaterThan`
* `greaterThanOrEqualTo`
* `in`
* `isDay`
* `isNotDay`
* `lessThan`
* `lessThanOrEqualTo`
* `between`
* `mathcesRegex`
* `missing`
* `notEquals`
* `notIn`
* `startsWith`

### Real World Example

```javascript
const params = {
  limit:        10,
  offset:       0,
  forceRefresh: true,
  operator:     "and"
}

const query = [
  {
    prop:     "properties.firstName",
    operator: "equals",
    value:    "John"
  },
  {
    prop:     "properties.lastName",
    operator: "equals",
    value:    "Doe"
  }
]

async function getProfiles() {
  try {
    
    const { data: { list } } = await unomi.profile.query(params, query);
    
    list.forEach((profile) => {
      console.log(`Hello ${profile.properties.firstName}!`);
    });
    
  } catch (err) {
    console.error("An error occurred while getting profiles");
    console.error(err);
  }
}
```
