Skip to content

Commit 32e4b1e

Browse files
authored
feat(loki): add simplified javascript comparisons $jgt, $jgte, $jlt, $jlte, $jbetween (#87)
See techfort/LokiJS@bb011df
1 parent d611722 commit 32e4b1e

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

packages/loki/spec/generic/ops.spec.ts

+20
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,26 @@ describe("Individual operator tests", () => {
373373
expect(coll.chain().find({a: {$gte: "7.2"}}).find({a: {$finite: true}}).data().length).toEqual(3); // 7.2, "11", "18.1"
374374
expect(coll.find({a: {$gt: "7.2"}}).length).toEqual(3); // "11", "18.1", "asdf"
375375
expect(coll.find({a: {$lte: "7.2"}}).length).toEqual(7); // 7.2, "5", "4", 4, 2, 1, null
376+
});
376377

378+
it("js range ops work as expected", () => {
379+
const db = new Loki("db");
380+
const coll = db.addCollection<{a: string | number, b:number}>("coll");
381+
382+
coll.insert({ a: null, b: 5});
383+
coll.insert({ a: "11", b: 5});
384+
coll.insert({ a: 2, b: 5});
385+
coll.insert({ a: "1", b: 5});
386+
coll.insert({ a: "4", b: 5});
387+
coll.insert({ a: 7.2, b: 5});
388+
coll.insert({ a: "5", b: 5});
389+
coll.insert({ a: 4, b: 5});
390+
coll.insert({ a: "18.1", b: 5});
391+
392+
expect(coll.find({ a: { $jgt: 5 } }).length).toEqual(3);
393+
expect(coll.find({ a: { $jgte: 5 } }).length).toEqual(4);
394+
expect(coll.find({ a: { $jlt: 7.2 } }).length).toEqual(6);
395+
expect(coll.find({ a: { $jlte: 7.2 } }).length).toEqual(7);
396+
expect(coll.find({ a: { $jbetween: [3.2, 7.8] } }).length).toEqual(4);
377397
});
378398
});

packages/loki/src/result_set.ts

+32
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,28 @@ export const LokiOps = {
111111
return (gtHelper(a, range[0], true) && ltHelper(a, range[1], true));
112112
},
113113

114+
// lightweight javascript comparisons
115+
$jgt(a: any, b: any): boolean {
116+
return a > b;
117+
},
118+
119+
$jgte(a: any, b: any): boolean {
120+
return a >= b;
121+
},
122+
123+
$jlt(a: any, b: any): boolean {
124+
return a < b;
125+
},
126+
127+
$jlte(a: any, b: any): boolean {
128+
return a <= b;
129+
},
130+
131+
$jbetween(a: any, range: [any, any]): boolean {
132+
if (a === undefined || a === null) return false;
133+
return (a >= range[0] && a <= range[1]);
134+
},
135+
114136
$in(a: any, b: any): boolean {
115137
return b.indexOf(a) !== -1;
116138
},
@@ -1265,6 +1287,16 @@ export namespace ResultSet {
12651287
$len?: number;
12661288
} | {
12671289
$where?: (val?: R) => boolean;
1290+
} | {
1291+
$jgt?: R;
1292+
} | {
1293+
$jgte?: R;
1294+
} | {
1295+
$jlt?: R;
1296+
} | {
1297+
$jlte?: R;
1298+
} | {
1299+
$jbetween?: [R, R];
12681300
};
12691301

12701302
export type Query<T> =

0 commit comments

Comments
 (0)