selector method

SelectorBuilder selector()

query to mongo db selector

Implementation

SelectorBuilder selector() {
  var builder = where;
  var _first = true;

  /// Equals
  for (var eq in equals.entries) {
    if (_first) {
      if (eq.value is List<dynamic> ||
          eq.value is Iterable ||
          eq.value is List<String>) {
        for (var e in eq.value) {
          if (_first) {
            builder.eq(eq.key, e);
          } else {
            builder.or(where.eq(eq.key, e));
          }
          _first = false;
        }
      } else {
        builder.eq(eq.key, eq.value);
      }
    } else {
      if (eq.value is List<dynamic> ||
          eq.value is Iterable ||
          eq.value is List<String>) {
        for (var e in eq.value) {
          builder.or(where.eq(eq.key, e));
        }
      } else {
        builder.and(where.eq(eq.key, eq.value));
      }
    }
    _first = false;
  }

  /// Not Equals
  for (var notEq in notEquals.entries) {
    if (_first) {
      if (notEq.value is List<dynamic> ||
          notEq.value is Iterable ||
          notEq.value is List<String>) {
        for (var e in notEq.value) {
          if (_first) {
            builder.ne(notEq.key, e);
          } else {
            builder.or(where.ne(notEq.key, e));
          }
          _first = false;
        }
      } else {
        builder.ne(notEq.key, notEq.value);
      }
    } else {
      if (notEq.value is List<dynamic> ||
          notEq.value is Iterable ||
          notEq.value is List<String>) {
        for (var e in notEq.value) {
          builder.or(where.ne(notEq.key, e));
        }
      } else {
        builder.and(where.ne(notEq.key, notEq.value));
      }
    }
    _first = false;
  }

  /// Sorts
  for (var sort in sorts.entries) {
    builder.sortBy(sort.key, descending: sort.value == Sorting.descending);
  }

  /// Fields
  if (fileds.values.contains(true)) {
    builder.fields(fileds.keys.where((element) => fileds[element]!).toList());
  }

  /// Exclude Fields
  if (fileds.values.contains(false)) {
    builder.excludeFields(
        fileds.keys.where((element) => !fileds[element]!).toList());
  }

  /// Limit and offsets
  builder
    ..limit(limit!)
    ..skip(offset!);

  /// Filters
  for (var filt in filters.keys) {
    /// Greater Than or equal
    if (filt == "gte") {
      var map = filters[filt];
      if (map is Map) {
        for (var field in map.entries) {
          builder.gte(field.key, field.value);
        }
      }
    }

    /// Greater Than
    if (filt == "gt") {
      var map = filters[filt];
      if (map is Map) {
        for (var field in map.entries) {
          builder.gt(field.key, field.value);
        }
      }
    }

    /// Less than or equal
    if (filt == "lte") {
      var map = filters[filt];
      if (map is Map) {
        for (var field in map.entries) {
          builder.lte(field.key, field.value);
        }
      }
    }

    /// Less Than
    if (filt == "lt") {
      var map = filters[filt];
      if (map is Map) {
        for (var field in map.entries) {
          builder.lt(field.key, field.value);
        }
      }
    }
  }

  return builder;
}