From aa12b7c724a7f19641e5f4e0470aaba86c08edf3 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Mon, 8 Nov 2021 14:21:14 -0800 Subject: [PATCH] Fix query unpacking breaking $regex operator If the regex string can be parsed as a date or a number, the unpacked query will be rejected by MongoDB because $regex operator only accepts a string. --- lib/query.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/query.ts b/lib/query.ts index 8e3eda4..164a79c 100644 --- a/lib/query.ts +++ b/lib/query.ts @@ -54,6 +54,17 @@ function normalize(input): any { return input; } +const EXPAND_OPS = new Set([ + "$eq", + "$gt", + "$gte", + "$in", + "$lt", + "$lte", + "$ne", + "$nin", +]); + function expandValue(value: unknown): unknown[] { if (Array.isArray(value)) { let a = []; @@ -71,7 +82,8 @@ function expandValue(value: unknown): unknown[] { const values = []; for (const [k, v] of Object.entries(value)) { keys.push(k); - values.push(expandValue(v)); + if (EXPAND_OPS.has(k)) values.push(expandValue(v)); + else values.push([v]); indices.push(0); }