Angular Service with N1QL Queries for Dynamic Filtering

Create a service in Angular that performs dynamic filtering using N1QL queries to fetch data from Couchbase based on user input.
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

  providedIn: 'root'
export class CouchbaseDataService {
  private readonly apiUrl = '';

  constructor(private http: HttpClient) {}

  // Function to perform dynamic filtering with N1QL queries
  getFilteredData(filters) {
    // Construct the N1QL query based on the filters
    // Example: SELECT * FROM `bucket-name` WHERE type = $type AND price < $maxPrice
    let n1qlQuery = 'SELECT * FROM `bucket-name`';
    let queryParams = {};
    let whereClauses = [];

    Object.keys(filters).forEach(key => {
      queryParams[key] = filters[key];
      whereClauses.push(`${key} = $${key}`);

    if (whereClauses.length) {
      n1qlQuery += ' WHERE ' + whereClauses.join(' AND ');

    const requestOptions = {
      method: 'POST',
      body: JSON.stringify({
        statement: n1qlQuery,
        args: queryParams,
      headers: {
        'Content-Type': 'application/json'

    return, requestOptions);
This Angular service named 'CouchbaseDataService' includes a method 'getFilteredData' to execute dynamic N1QL queries against a Couchbase server. The method constructs the query based on provided filters, compiles parameters for the placeholders, and performs a POST request with the constructed query to the Couchbase REST API. It expects a base API URL pointed to the Couchbase query service and uses Angular's HttpClient for the API request.