#

# Overview

CollQL is a Dart library inspired by MongoDB queries, designed for expressive and flexible in-memory collection manipulation and filtering.

  • Filters: Create complex queries using logical and comparison operators.
  • Modifiers: Update collections and documents with MongoDB-like operations.
  • Extensions: Utility methods to simplify usage with Dart collections.
  • Proxies: Builders for fluent construction of filters and modifiers.
import 'package:collql/collql.dart';

final List<Document> data = [
  Document({'name': "john", 'age': 45}),
  Document({'name': "bob", 'age': 21}),
  Document({'name': "alice", 'age': 60}),
  Document({'name': "ted", 'age': 10}),
];

final filter = and([
  'age'.gte(18),
  'age'.lte(50)
]);

final List<Document> result = CollectionQL(data).fetch(filter).toList();
assert(result.length == 2); // true

# Quick Guide

# Documents

These are the basic data structure in CollQL. Each document is represented by an object containing key-value pairs, similar to a map or JSON object. [Read more]

import 'package:collql/collql.dart';

final doc = Document({
  "name": "John",
  "age": 30
});

assert(doc.get('/name') == "John"); // true
doc.set('/age', 31);
assert(doc.get('/age') == 31); // true

# Filters

Allow you to select documents from a collection or test values based on conditions. They are inspired by MongoDB operators. [Read more]

import 'package:collql/collql.dart';

final List<Document> data = [
  Document({'name': "john", 'age': 45}),
  // ... //
];

final query = and([
  'age'.gte(18),
  'age'.lte(50)
]);

assert(query.apply(data[0]) == true);  // true

Some operators: eq, notEq, gt, gte, lt, lte, and, or

# Modifiers

Allow you to update documents declaratively. [Read more]

import 'package:collql/collql.dart';

final List<Document> data = [
  Document({'name': "john", 'age': 45}),
  // ... //
];

final doc = Document({ "name": "john", "age": 45 });
final update = 'name'.rename('fullName');
update.apply(doc);
assert(doc.get('/name') == null); // true
assert(doc.get('/fullName') != null); // true
assert(data[0].get('/name') == doc.get('/fullName')); // true

Some modifiers: get, set, unset, rename, push, pull

# Credits

CollQL is inspired by Nitrite, and combines concepts from both MongoDB and Dart's collection manipulation capabilities. It aims to provide a seamless and expressive way to work with in-memory data structures.