cry-db 2.4.32 → 2.4.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -0
- package/dist/mongo.d.mts +191 -0
- package/dist/mongo.d.mts.map +1 -1
- package/dist/mongo.mjs +801 -40
- package/dist/mongo.mjs.map +1 -1
- package/package.json +37 -36
package/README.md
CHANGED
|
@@ -78,6 +78,95 @@ await users.save({ $set: { age: 31 } }, userId);
|
|
|
78
78
|
await users.upsert({ email: 'a@b.c' }, { $set: { name: 'Alice' } });
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
+
### Bracket-by-`_id` array paths
|
|
82
|
+
|
|
83
|
+
Update array elements by their `_id` instead of by position. The path
|
|
84
|
+
`arr[<id>]` is shorthand for "the element of `arr` whose `_id` is `<id>`",
|
|
85
|
+
resolved server-side against the live document — no race window where a
|
|
86
|
+
concurrent reorder, insert, or delete shifts indices between client read
|
|
87
|
+
and server write.
|
|
88
|
+
|
|
89
|
+
Supported in every write method: `updateOne`, `save`, `update`, `upsert`,
|
|
90
|
+
`upsertBatch`, and `updateCollections`. Top-level shorthand (no `$set`
|
|
91
|
+
wrapper) is normalized into `$set` automatically; `key: undefined` becomes
|
|
92
|
+
`$unset` as usual.
|
|
93
|
+
|
|
94
|
+
#### Syntax
|
|
95
|
+
|
|
96
|
+
| Form | Quoted variants |
|
|
97
|
+
|---|---|
|
|
98
|
+
| `arr[<id>]` | `arr['<id>']`, `arr["<id>"]` |
|
|
99
|
+
|
|
100
|
+
Quoted and unquoted forms are equivalent. Use quotes when an `_id` contains
|
|
101
|
+
characters that could conflict with dot-notation (rare).
|
|
102
|
+
|
|
103
|
+
#### Four operations
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
// 1. Update sub-field of element with _id === 'p2'
|
|
107
|
+
// (translated to $set + arrayFilters [{ f0._id: 'p2' }])
|
|
108
|
+
await items.updateOne(
|
|
109
|
+
{ _id: 'r1' },
|
|
110
|
+
{ 'postavke[p2].kolicina': 99 },
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
// 2. Unset sub-field of element with _id === 'p2'
|
|
114
|
+
// (key: undefined → $unset → mongo $unset on the matched element)
|
|
115
|
+
await items.updateOne(
|
|
116
|
+
{ _id: 'r1' },
|
|
117
|
+
{ 'postavke[p2].navodilo': undefined },
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
// 3. Insert / replace an element by _id (terminal bracket + array value)
|
|
121
|
+
// Idempotent — re-sending the same _id replaces in place, no duplicates.
|
|
122
|
+
// Each element MUST carry its own `_id`.
|
|
123
|
+
await items.updateOne(
|
|
124
|
+
{ _id: 'r1' },
|
|
125
|
+
{ "postavke['p0']": [{ _id: 'p0', value: 0 }] },
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
// 4. Remove an element by _id (terminal bracket + undefined)
|
|
129
|
+
// Translated to $pull (or merged into the same pipeline as inserts above).
|
|
130
|
+
await items.updateOne(
|
|
131
|
+
{ _id: 'r1' },
|
|
132
|
+
{ "postavke['p1']": undefined },
|
|
133
|
+
);
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Single-element insert/remove uses an array of one element on the value side
|
|
137
|
+
(form 3). Multiple terminal-bracket inserts against the same parent field
|
|
138
|
+
are merged into one atomic stage.
|
|
139
|
+
|
|
140
|
+
#### Combining operations
|
|
141
|
+
|
|
142
|
+
Sub-field updates (form 1/2) and terminal-bracket inserts/removes (form 3/4)
|
|
143
|
+
can both appear in a single update with one exception:
|
|
144
|
+
|
|
145
|
+
| In the same update | Result |
|
|
146
|
+
|---|---|
|
|
147
|
+
| Sub-field updates only (1, 2) | Single doc update with `arrayFilters`. |
|
|
148
|
+
| Terminal removes only (4) | `$pull` added to the doc; `arrayFilters` still allowed for any sub-field updates. |
|
|
149
|
+
| Terminal inserts (3), with or without removes (4) | Aggregation pipeline with a unified `$filter + $concatArrays` stage per parent field. Inserts are idempotent (re-inserting the same `_id` replaces the element). |
|
|
150
|
+
| Terminal inserts **and** sub-field updates against the same array | **Throws.** Pipeline form does not support `arrayFilters`; split into two calls. |
|
|
151
|
+
|
|
152
|
+
#### Nested brackets
|
|
153
|
+
|
|
154
|
+
Sub-field paths can chain brackets to address elements in nested arrays:
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
await items.updateOne(
|
|
158
|
+
{ _id: 'r5' },
|
|
159
|
+
{ 'terapije[t1].postavke[sp2].kolicina': 99 },
|
|
160
|
+
);
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Multiple paths into the same element share one `arrayFilters` entry
|
|
164
|
+
(deduplicated by `(parentPath, _id)`).
|
|
165
|
+
|
|
166
|
+
Terminal-bracket inserts/removes are **not** supported under a nested-bracket
|
|
167
|
+
parent (e.g. `terapije[t1].postavke['new']: [...]`). Add the inner element
|
|
168
|
+
in a separate call, or rewrite the whole `terapije[t1].postavke` array.
|
|
169
|
+
|
|
81
170
|
### Delete
|
|
82
171
|
|
|
83
172
|
```ts
|
|
@@ -275,6 +364,7 @@ Options passed to query methods:
|
|
|
275
364
|
users.distinct<string>('status'); // distinct field values (sorted)
|
|
276
365
|
users.findNewer(timestamp, query, opts); // find records newer than timestamp
|
|
277
366
|
mongo.findNewerMany([{ collection, timestamp }]); // batch findNewer across collections
|
|
367
|
+
mongo.findNewerMany([{ collection, timestamp, specId }]); // specId optional — disambiguates duplicate-collection specs
|
|
278
368
|
mongo.findByIdsInManyCollections([{ collection, ids }]); // batch findByIds across collections
|
|
279
369
|
users.isUnique('email', 'a@b.c', excludeId); // uniqueness check
|
|
280
370
|
users.aggregate(pipeline); // aggregation pipeline
|
package/dist/mongo.d.mts
CHANGED
|
@@ -228,6 +228,197 @@ export declare class Mongo extends Db {
|
|
|
228
228
|
private _hasHashedKeys;
|
|
229
229
|
private _hasSequenceFields;
|
|
230
230
|
private _processUpdateObject;
|
|
231
|
+
/**
|
|
232
|
+
* Translate `arr[<_id>].field` bracket-by-_id segments inside `$set`
|
|
233
|
+
* and `$unset` paths to mongo positional `$[<filterId>]` placeholders,
|
|
234
|
+
* generating matching `arrayFilters` entries.
|
|
235
|
+
*
|
|
236
|
+
* Lets clients identify array elements by their `_id` instead of by
|
|
237
|
+
* position. Mongo evaluates the filter against the live document at
|
|
238
|
+
* write time, so the operation is atomic — no race window exists where
|
|
239
|
+
* a concurrent reorder/insert/delete by another writer could shift the
|
|
240
|
+
* targeted index between client read and server write.
|
|
241
|
+
*
|
|
242
|
+
* Path token forms (matches `cry-synced-db-client` `tokenizePath`):
|
|
243
|
+
* - plain `field` → kept as-is
|
|
244
|
+
* - numeric `<n>` → kept as-is (legacy positional index path)
|
|
245
|
+
* - bracket `[<_id>]` → translated to `$[fN]`, filter `{fN._id: <_id>}` emitted
|
|
246
|
+
*
|
|
247
|
+
* Filters are deduplicated by (parentPath, _id) so multiple paths into
|
|
248
|
+
* the same array element share one filter (mongo requires every filter
|
|
249
|
+
* identifier to be referenced).
|
|
250
|
+
*
|
|
251
|
+
* Mutates `update.$set` / `update.$unset` in place. Returns the
|
|
252
|
+
* arrayFilters array (or `undefined` when no bracket paths present).
|
|
253
|
+
*/
|
|
254
|
+
private _extractArrayFilters;
|
|
255
|
+
/**
|
|
256
|
+
* Tokenize a dot-notation path that may contain `[<_id>]` bracket
|
|
257
|
+
* segments. Mirrors the client-side `cry-synced-db-client/utils/computeDiff#tokenizePath`.
|
|
258
|
+
*
|
|
259
|
+
* "postavke[A].kolicina" → ["postavke", "[A]", "kolicina"]
|
|
260
|
+
* "koraki.0.diag" → ["koraki", "0", "diag"]
|
|
261
|
+
* "stranka.gsm" → ["stranka", "gsm"]
|
|
262
|
+
* "arr[A].sub[B].field" → ["arr", "[A]", "sub", "[B]", "field"]
|
|
263
|
+
*/
|
|
264
|
+
private static _tokenizePath;
|
|
265
|
+
/**
|
|
266
|
+
* Strip `[ ]` wrapper and surrounding `'…'` / `"…"` quotes from a bracket-id token.
|
|
267
|
+
* Convention: `[p2]`, `['p2']`, `["p2"]` all denote element with `_id === "p2"`.
|
|
268
|
+
* Quoted form is preferred when id contains characters that could conflict with
|
|
269
|
+
* dot-notation (rare, but defensive).
|
|
270
|
+
*
|
|
271
|
+
* Throws on empty id (`[]`, `['']`, `[""]`) — empty bracket has no semantic meaning
|
|
272
|
+
* (no element to target) and almost certainly indicates a caller bug. Optional
|
|
273
|
+
* `path` argument is included in the error message for easier debugging.
|
|
274
|
+
*/
|
|
275
|
+
private static _unquoteBracketId;
|
|
276
|
+
/**
|
|
277
|
+
* Pre-processing pass that VALIDATES element `_id` for terminal bracket-id
|
|
278
|
+
* paths in `$set` whose value is an object (replace) or array of objects
|
|
279
|
+
* (insert).
|
|
280
|
+
*
|
|
281
|
+
* Two rules enforced:
|
|
282
|
+
* 1) `_id` in brackets must be non-empty (empty → throw via `_unquoteBracketId`)
|
|
283
|
+
* 2) every element MUST carry an `_id` that equals the bracket id
|
|
284
|
+
* (missing or mismatched → throw, prevents data corruption / silent renaming)
|
|
285
|
+
*
|
|
286
|
+
* Throws on violation. Skips primitive values (caller knows what they're
|
|
287
|
+
* doing) and `null` (rare, not a typical insert/replace shape).
|
|
288
|
+
*
|
|
289
|
+
* Called BEFORE `_extractArrayInserts`/`_extractArrayRemoves`/`_extractArrayFilters`
|
|
290
|
+
* so downstream code can assume every element has an `_id`.
|
|
291
|
+
*
|
|
292
|
+
* Note: auto-fill of missing `_id` from the bracket id was previously supported
|
|
293
|
+
* but was removed because it hid client bugs (e.g. constructing an insert with
|
|
294
|
+
* the wrong field name and silently writing an element identified by the bracket).
|
|
295
|
+
* Always set `_id` explicitly on the client.
|
|
296
|
+
*/
|
|
297
|
+
private _validateAndAutoFillTerminalBracketValues;
|
|
298
|
+
/**
|
|
299
|
+
* Detect "terminal-bracket-id with array value" paths in `$set` — these are the
|
|
300
|
+
* INSERT operations: client wants to add array elements identified by `_id`,
|
|
301
|
+
* not update an existing element's sub-fields.
|
|
302
|
+
*
|
|
303
|
+
* Convention:
|
|
304
|
+
* - Path ends with `[<id>]` (terminal bracket, no `.<subfield>` after) AND
|
|
305
|
+
* - Value is an array AND
|
|
306
|
+
* - Every element in the array has `_id` (required for idempotency check)
|
|
307
|
+
*
|
|
308
|
+
* Mutates `update.$set` (removes matched paths). Returns extracted insert specs,
|
|
309
|
+
* or `undefined` if no inserts present.
|
|
310
|
+
*
|
|
311
|
+
* Each spec carries:
|
|
312
|
+
* - `field`: parent array field path (e.g. `"postavke"`)
|
|
313
|
+
* - `ids`: `_id`s of all elements to insert (used to dedupe existing)
|
|
314
|
+
* - `elements`: the new elements to push
|
|
315
|
+
*
|
|
316
|
+
* Note: parent paths with NESTED brackets (e.g. `terapije[t1].postavke[<new>]`)
|
|
317
|
+
* are NOT supported here — left in `$set` for the existing arrayFilters path
|
|
318
|
+
* (which would silently no-op for non-existent ids; future enhancement).
|
|
319
|
+
*/
|
|
320
|
+
private _extractArrayInserts;
|
|
321
|
+
/**
|
|
322
|
+
* Detect "terminal-bracket-id with no value" paths in `$unset` — these are the
|
|
323
|
+
* REMOVE operations: client wants to drop array elements identified by `_id`.
|
|
324
|
+
*
|
|
325
|
+
* Convention:
|
|
326
|
+
* - Path ends with `[<id>]` (terminal bracket, no `.<subfield>` after) AND
|
|
327
|
+
* - Was sent as `undefined` in the original update (became `$unset` after
|
|
328
|
+
* `_processUpdateObject` normalization).
|
|
329
|
+
*
|
|
330
|
+
* Mongo's `$unset` on `arr.$[fN]` would set the element to `null` in place
|
|
331
|
+
* (not remove from array). For real removal we use `$pull` instead — or, when
|
|
332
|
+
* combined with terminal-bracket inserts, the unified `$filter + $concatArrays`
|
|
333
|
+
* aggregation stage in `_applyBracketProcessing`.
|
|
334
|
+
*
|
|
335
|
+
* Mutates `update.$unset` (removes matched paths). Returns extracted remove
|
|
336
|
+
* specs (one per parent field, ids merged), or `undefined` if no removes present.
|
|
337
|
+
*
|
|
338
|
+
* Note: parent paths with NESTED brackets are not supported here (left in `$unset`
|
|
339
|
+
* for the existing arrayFilters fallback).
|
|
340
|
+
*/
|
|
341
|
+
private _extractArrayRemoves;
|
|
342
|
+
/**
|
|
343
|
+
* Extracts SINGLE-bracket bracket-by-_id paths from `$set`/`$unset`, grouped
|
|
344
|
+
* by `(parentArrayField, elementId)`. Used when pipeline form is needed
|
|
345
|
+
* (because terminal-bracket inserts/removes are present) — these paths must
|
|
346
|
+
* be expressed as `$map` + `$mergeObjects` stages, since mongo does not
|
|
347
|
+
* allow `arrayFilters` to coexist with aggregation pipelines.
|
|
348
|
+
*
|
|
349
|
+
* Path forms detected (mutated out of `$set`/`$unset`):
|
|
350
|
+
* - `$set` `arr[id].field` → sets["field"] = value (sub-field set)
|
|
351
|
+
* - `$set` `arr[id].sub.field` → sets["sub.field"] = value (deep sub-field set)
|
|
352
|
+
* - `$set` `arr[id]` (object value) → replace = value (whole-element replace)
|
|
353
|
+
* - `$unset` `arr[id].field` → unsets.push("field") (sub-field unset)
|
|
354
|
+
*
|
|
355
|
+
* NOT detected (left in `$set`/`$unset` for caller to handle):
|
|
356
|
+
* - paths with NESTED brackets (e.g. `arr[A].sub[B].field`) — caller must
|
|
357
|
+
* reject these when in pipeline mode (still unsupported).
|
|
358
|
+
* - terminal `arr[id]` already removed by `_extractArrayInserts`/`_extractArrayRemoves`.
|
|
359
|
+
*
|
|
360
|
+
* Mutates `update.$set` and `update.$unset`. Returns the grouped ops, or
|
|
361
|
+
* `undefined` if no extractable paths were present.
|
|
362
|
+
*/
|
|
363
|
+
private _extractArraySubFieldUpdates;
|
|
364
|
+
/**
|
|
365
|
+
* Build an aggregation expression that produces a transformed copy of an
|
|
366
|
+
* element, applying the given sets/unsets and (optionally) a whole-element
|
|
367
|
+
* replacement.
|
|
368
|
+
*
|
|
369
|
+
* - `replace`: when set, becomes the new base (full element replacement).
|
|
370
|
+
* - `sets`: dot-paths within element → values; deep-merged via recursive
|
|
371
|
+
* `$mergeObjects`/`$ifNull` so nested updates preserve sibling fields.
|
|
372
|
+
* - `unsets`: dot-paths within element to remove. Implemented via
|
|
373
|
+
* `$arrayToObject($filter($objectToArray(merged), kv.k notIn unsets))` —
|
|
374
|
+
* `$$REMOVE` inside `$mergeObjects` does NOT drop the field (mongo treats
|
|
375
|
+
* it as a missing value and falls through to the previous operand), so
|
|
376
|
+
* the explicit kv-filter is required.
|
|
377
|
+
*
|
|
378
|
+
* The returned expression is suitable as the `in:` argument of `$map`.
|
|
379
|
+
*/
|
|
380
|
+
private static _buildElementMergeExpr;
|
|
381
|
+
/**
|
|
382
|
+
* Translate an update doc's `$inc` and `$currentDate` operators into
|
|
383
|
+
* pipeline-stage equivalents, so revisions (`_rev` increment, `_ts` timestamp)
|
|
384
|
+
* still fire when the rest of the update goes through aggregation pipeline.
|
|
385
|
+
*
|
|
386
|
+
* - `$inc: { f: n }` → `{ $set: { f: { $add: [{ $ifNull: ['$f', 0] }, n] } } }`
|
|
387
|
+
* - `$currentDate: { f: true }` → `{ $set: { f: '$$NOW' } }` (Date)
|
|
388
|
+
* - `$currentDate: { f: { $type: 'date' } }` → same as above
|
|
389
|
+
* - `$currentDate: { f: { $type: 'timestamp' } }` → `{ $set: { f: '$$CLUSTER_TIME' } }` (Timestamp)
|
|
390
|
+
*
|
|
391
|
+
* Mutates `update` (deletes `$inc` and `$currentDate`). Returns 0..2 pipeline stages.
|
|
392
|
+
*/
|
|
393
|
+
private static _drainIncAndCurrentDateToPipelineStages;
|
|
394
|
+
/**
|
|
395
|
+
* Combined bracket-path processing: extracts inserts (`arr[id]: [els]`),
|
|
396
|
+
* removes (`arr[id]: undefined` → `$unset`), sub-field updates
|
|
397
|
+
* (`arr[id].field`, `arr[id].sub.field`, `arr[id]: <obj>`) and arrayFilters.
|
|
398
|
+
* Decides whether mongo update should be sent as a regular doc or as an
|
|
399
|
+
* aggregation pipeline.
|
|
400
|
+
*
|
|
401
|
+
* Returns `{ update, arrayFilters? }`:
|
|
402
|
+
* - `update` is the original update doc OR an aggregation pipeline.
|
|
403
|
+
* - `arrayFilters` is set when sub-field bracket paths needed translation; only
|
|
404
|
+
* valid when `update` is the doc form (mongo doesn't support arrayFilters on pipelines).
|
|
405
|
+
*
|
|
406
|
+
* Strategy matrix:
|
|
407
|
+
* - no inserts, no removes → existing arrayFilters path (or pure update doc)
|
|
408
|
+
* - removes only → adds `$pull` to update doc; arrayFilters allowed
|
|
409
|
+
* - inserts (± removes) → pipeline form; SINGLE-bracket sub-field paths
|
|
410
|
+
* are also translated to pipeline `$map` + `$mergeObjects`
|
|
411
|
+
* so they coexist with the inserts. NESTED-bracket paths
|
|
412
|
+
* (e.g. `arr[A].sub[B].field`) combined with inserts still
|
|
413
|
+
* throw — caller must split into two operations.
|
|
414
|
+
*
|
|
415
|
+
* The unified per-parent-field pipeline stage atomically filters out elements
|
|
416
|
+
* matching any of (removeIds ∪ insertIds), maps remaining elements through the
|
|
417
|
+
* sub-field merge expression, then appends new elements. Inserts remain
|
|
418
|
+
* idempotent (re-inserting same `_id` no-ops). `$inc` and `$currentDate` are
|
|
419
|
+
* also translated to pipeline stages so revisions (`_rev`/`_ts`) still fire.
|
|
420
|
+
*/
|
|
421
|
+
private _applyBracketProcessing;
|
|
231
422
|
private _processHashedKeys;
|
|
232
423
|
/**
|
|
233
424
|
* Removes fields starting with `__` from an object (mutates in place).
|
package/dist/mongo.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.d.mts","sourceRoot":"","sources":["../src/mongo.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mongo.d.mts","sourceRoot":"","sources":["../src/mongo.mts"],"names":[],"mappings":"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"}
|