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;
}