@mikro-orm/mongodb 7.1.0-dev.2 → 7.1.0-dev.21
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/MongoConnection.d.ts +1 -0
- package/MongoConnection.js +3 -0
- package/MongoDriver.d.ts +4 -1
- package/MongoDriver.js +76 -0
- package/MongoEntityManager.d.ts +6 -2
- package/MongoEntityManager.js +31 -0
- package/MongoPlatform.js +4 -0
- package/MongoSchemaGenerator.d.ts +5 -0
- package/MongoSchemaGenerator.js +39 -9
- package/package.json +4 -4
package/MongoConnection.d.ts
CHANGED
package/MongoConnection.js
CHANGED
|
@@ -143,6 +143,9 @@ export class MongoConnection extends Connection {
|
|
|
143
143
|
if (opts.allowDiskUse != null) {
|
|
144
144
|
options.allowDiskUse = opts.allowDiskUse;
|
|
145
145
|
}
|
|
146
|
+
if (opts.chunkSize != null) {
|
|
147
|
+
options.batchSize = opts.chunkSize;
|
|
148
|
+
}
|
|
146
149
|
const resultSet = this.getCollection(entityName).find(where, options);
|
|
147
150
|
let query = `db.getCollection('${collection}').find(${this.logObject(where)}, ${this.logObject(options)})`;
|
|
148
151
|
const orderBy = Utils.asArray(opts.orderBy);
|
package/MongoDriver.d.ts
CHANGED
|
@@ -15,11 +15,13 @@ export declare class MongoDriver extends DatabaseDriver<MongoConnection> {
|
|
|
15
15
|
rawResults?: boolean;
|
|
16
16
|
}): AsyncIterableIterator<T>;
|
|
17
17
|
find<T extends object, P extends string = never, F extends string = never, E extends string = never>(entityName: EntityName<T>, where: FilterQuery<T>, options?: FindOptions<T, P, F, E>): Promise<EntityData<T>[]>;
|
|
18
|
+
private findWithPartitionLimit;
|
|
18
19
|
findOne<T extends object, P extends string = never, F extends string = never, E extends string = never>(entityName: EntityName<T>, where: FilterQuery<T>, options?: FindOneOptions<T, P, F, E>): Promise<EntityData<T> | null>;
|
|
19
20
|
findVirtual<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>, options: FindOptions<T, any, any, any>): Promise<EntityData<T>[]>;
|
|
20
21
|
streamVirtual<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>, options: FindOptions<T, any, any, any>): AsyncIterableIterator<EntityData<T>>;
|
|
21
22
|
count<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>, options?: CountOptions<T>): Promise<number>;
|
|
22
23
|
nativeInsert<T extends object>(entityName: EntityName<T>, data: EntityDictionary<T>, options?: NativeInsertUpdateOptions<T>): Promise<QueryResult<T>>;
|
|
24
|
+
nativeClone<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>, overrides?: EntityData<T>, options?: NativeInsertUpdateOptions<T>): Promise<QueryResult<T>>;
|
|
23
25
|
nativeInsertMany<T extends object>(entityName: EntityName<T>, data: EntityDictionary<T>[], options?: NativeInsertUpdateManyOptions<T>): Promise<QueryResult<T>>;
|
|
24
26
|
nativeUpdate<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>, data: EntityDictionary<T>, options?: NativeInsertUpdateOptions<T> & UpsertOptions<T>): Promise<QueryResult<T>>;
|
|
25
27
|
nativeUpdateMany<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>[], data: EntityDictionary<T>[], options?: NativeInsertUpdateOptions<T> & UpsertManyOptions<T>): Promise<QueryResult<T>>;
|
|
@@ -30,7 +32,8 @@ export declare class MongoDriver extends DatabaseDriver<MongoConnection> {
|
|
|
30
32
|
streamAggregate<T extends object>(entityName: EntityName<T>, pipeline: any[], ctx?: Transaction<ClientSession>): AsyncIterableIterator<T>;
|
|
31
33
|
getPlatform(): MongoPlatform;
|
|
32
34
|
private buildQueryOptions;
|
|
33
|
-
|
|
35
|
+
/** @internal */
|
|
36
|
+
renameFields<T extends object>(entityName: EntityName<T>, data: T, dotPaths?: boolean, object?: boolean, root?: boolean): T;
|
|
34
37
|
private convertObjectIds;
|
|
35
38
|
private buildFilterById;
|
|
36
39
|
protected buildFields<T extends object, P extends string = never>(entityName: EntityName<T>, populate: PopulateOptions<T>[], fields?: readonly EntityField<T, P>[], exclude?: string[]): string[] | undefined;
|
package/MongoDriver.js
CHANGED
|
@@ -30,6 +30,7 @@ export class MongoDriver extends DatabaseDriver {
|
|
|
30
30
|
offset: options.offset,
|
|
31
31
|
fields,
|
|
32
32
|
ctx: options.ctx,
|
|
33
|
+
chunkSize: options.chunkSize ?? 100,
|
|
33
34
|
...this.buildQueryOptions(options),
|
|
34
35
|
});
|
|
35
36
|
for await (const item of res) {
|
|
@@ -78,6 +79,10 @@ export class MongoDriver extends DatabaseDriver {
|
|
|
78
79
|
return res.map(r => this.mapResult(r, this.metadata.find(entityName)));
|
|
79
80
|
}
|
|
80
81
|
const orderBy = Utils.asArray(options.orderBy).map(orderBy => this.renameFields(entityName, orderBy, true));
|
|
82
|
+
const partitionLimit = options._partitionLimit;
|
|
83
|
+
if (partitionLimit) {
|
|
84
|
+
return this.findWithPartitionLimit(entityName, where, orderBy, fields ?? [], partitionLimit, options);
|
|
85
|
+
}
|
|
81
86
|
const res = await this.rethrow(this.getConnection('read').find(entityName, where, {
|
|
82
87
|
orderBy,
|
|
83
88
|
limit: options.limit,
|
|
@@ -88,6 +93,48 @@ export class MongoDriver extends DatabaseDriver {
|
|
|
88
93
|
}));
|
|
89
94
|
return res.map(r => this.mapResult(r, this.metadata.find(entityName)));
|
|
90
95
|
}
|
|
96
|
+
async findWithPartitionLimit(entityName, where, orderBy, fields, partitionLimit, options) {
|
|
97
|
+
const meta = this.metadata.find(entityName);
|
|
98
|
+
const { limit, offset = 0 } = partitionLimit;
|
|
99
|
+
// Resolve the partition property to its DB field name; callers always pass
|
|
100
|
+
// a declared property on the target meta (FK of the owning side).
|
|
101
|
+
const prop = meta.properties[partitionLimit.partitionBy];
|
|
102
|
+
const partitionField = prop.fieldNames[0];
|
|
103
|
+
const pipeline = [];
|
|
104
|
+
pipeline.push({ $match: where });
|
|
105
|
+
if (orderBy.length > 0) {
|
|
106
|
+
const sortSpec = {};
|
|
107
|
+
for (const order of orderBy) {
|
|
108
|
+
for (const [key, dir] of Object.entries(order)) {
|
|
109
|
+
sortSpec[key] = dir === 'ASC' || dir === 'asc' || dir === 1 ? 1 : -1;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
pipeline.push({ $sort: sortSpec });
|
|
113
|
+
}
|
|
114
|
+
// $sort before $group ensures $push collects in correct order
|
|
115
|
+
pipeline.push({
|
|
116
|
+
$group: {
|
|
117
|
+
_id: `$${partitionField}`,
|
|
118
|
+
__docs: { $push: '$$ROOT' },
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
pipeline.push({
|
|
122
|
+
$project: {
|
|
123
|
+
__docs: { $slice: ['$__docs', offset, limit] },
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
pipeline.push({ $unwind: '$__docs' });
|
|
127
|
+
pipeline.push({ $replaceRoot: { newRoot: '$__docs' } });
|
|
128
|
+
if (fields.length > 0) {
|
|
129
|
+
const projection = {};
|
|
130
|
+
for (const field of fields) {
|
|
131
|
+
projection[field] = 1;
|
|
132
|
+
}
|
|
133
|
+
pipeline.push({ $project: projection });
|
|
134
|
+
}
|
|
135
|
+
const res = await this.rethrow(this.getConnection('read').aggregate(entityName, pipeline, options.ctx, options.logging));
|
|
136
|
+
return res.map(r => this.mapResult(r, meta));
|
|
137
|
+
}
|
|
91
138
|
async findOne(entityName, where, options = { populate: [], orderBy: {} }) {
|
|
92
139
|
if (this.metadata.find(entityName)?.virtual) {
|
|
93
140
|
const [item] = await this.findVirtual(entityName, where, options);
|
|
@@ -148,6 +195,27 @@ export class MongoDriver extends DatabaseDriver {
|
|
|
148
195
|
data = this.renameFields(entityName, data);
|
|
149
196
|
return this.rethrow(this.getConnection('write').insertOne(entityName, data, options.ctx));
|
|
150
197
|
}
|
|
198
|
+
async nativeClone(entityName, where, overrides, options = {}) {
|
|
199
|
+
const meta = this.metadata.find(entityName);
|
|
200
|
+
const pk = meta.getPrimaryProps()[0].fieldNames[0] ?? '_id';
|
|
201
|
+
const normalizedWhere = Utils.isPrimaryKey(where) ? { [pk]: where } : where;
|
|
202
|
+
const renameWhere = this.renameFields(entityName, normalizedWhere);
|
|
203
|
+
const source = await this.rethrow(this.getConnection('read').find(entityName, renameWhere, { ctx: options.ctx, limit: 1 }));
|
|
204
|
+
if (!source.length) {
|
|
205
|
+
throw new Error('Cannot clone: no entity found matching the given condition');
|
|
206
|
+
}
|
|
207
|
+
const doc = source[0];
|
|
208
|
+
delete doc[pk];
|
|
209
|
+
if (overrides) {
|
|
210
|
+
const mapped = this.renameFields(entityName, overrides);
|
|
211
|
+
Object.assign(doc, mapped);
|
|
212
|
+
}
|
|
213
|
+
if (meta.versionProperty) {
|
|
214
|
+
const vProp = meta.properties[meta.versionProperty];
|
|
215
|
+
doc[vProp.fieldNames[0]] = vProp.runtimeType === 'Date' ? new Date() : 1;
|
|
216
|
+
}
|
|
217
|
+
return this.rethrow(this.getConnection('write').insertOne(entityName, doc, options.ctx));
|
|
218
|
+
}
|
|
151
219
|
async nativeInsertMany(entityName, data, options = {}) {
|
|
152
220
|
data = data.map(item => {
|
|
153
221
|
this.handleVersionProperty(entityName, item);
|
|
@@ -247,6 +315,13 @@ export class MongoDriver extends DatabaseDriver {
|
|
|
247
315
|
if (options.indexHint != null) {
|
|
248
316
|
ret.indexHint = options.indexHint;
|
|
249
317
|
}
|
|
318
|
+
else if (options.using != null) {
|
|
319
|
+
const names = Utils.asArray(options.using);
|
|
320
|
+
if (names.length > 1) {
|
|
321
|
+
throw new Error('MongoDB only supports a single index hint per query. Provide one index name instead of an array.');
|
|
322
|
+
}
|
|
323
|
+
ret.indexHint = names[0];
|
|
324
|
+
}
|
|
250
325
|
if (options.maxTimeMS != null) {
|
|
251
326
|
ret.maxTimeMS = options.maxTimeMS;
|
|
252
327
|
}
|
|
@@ -255,6 +330,7 @@ export class MongoDriver extends DatabaseDriver {
|
|
|
255
330
|
}
|
|
256
331
|
return ret;
|
|
257
332
|
}
|
|
333
|
+
/** @internal */
|
|
258
334
|
renameFields(entityName, data, dotPaths = false, object, root = true) {
|
|
259
335
|
if (data == null && root) {
|
|
260
336
|
return {};
|
package/MongoEntityManager.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityManager, type EntityName, type EntityRepository, type GetRepository, type
|
|
1
|
+
import { EntityManager, type CountByOptions, type Dictionary, type EntityKey, type EntityName, type EntityRepository, type GetRepository, type Loaded, type StreamOptions, type TransactionOptions, type WithUsingOptions } from '@mikro-orm/core';
|
|
2
2
|
import type { Collection, Document, TransactionOptions as MongoTransactionOptions } from 'mongodb';
|
|
3
3
|
import type { MongoDriver } from './MongoDriver.js';
|
|
4
4
|
import type { MongoEntityRepository } from './MongoEntityRepository.js';
|
|
@@ -17,8 +17,12 @@ export declare class MongoEntityManager<Driver extends MongoDriver = MongoDriver
|
|
|
17
17
|
/**
|
|
18
18
|
* @inheritDoc
|
|
19
19
|
*/
|
|
20
|
-
stream<Entity extends object, Hint extends string = never, Fields extends string = never, Excludes extends string = never>(entityName: EntityName<Entity>, options?: StreamOptions<NoInfer<Entity>, Hint, Fields, Excludes>): AsyncIterableIterator<Loaded<Entity, Hint, Fields, Excludes>>;
|
|
20
|
+
stream<Entity extends object, Hint extends string = never, Fields extends string = never, Excludes extends string = never, Using extends string = never>(entityName: EntityName<Entity>, options?: WithUsingOptions<StreamOptions<NoInfer<Entity>, Hint, Fields, Excludes>, NoInfer<Entity>, Using>): AsyncIterableIterator<Loaded<Entity, Hint, Fields, Excludes>>;
|
|
21
21
|
getCollection<T extends Document>(entityOrCollectionName: EntityName<T> | string): Collection<T>;
|
|
22
|
+
/**
|
|
23
|
+
* @inheritDoc
|
|
24
|
+
*/
|
|
25
|
+
countBy<Entity extends object>(entityName: EntityName<Entity>, groupBy: EntityKey<Entity> | readonly EntityKey<Entity>[], options?: CountByOptions<Entity>): Promise<Dictionary<number>>;
|
|
22
26
|
/**
|
|
23
27
|
* @inheritDoc
|
|
24
28
|
*/
|
package/MongoEntityManager.js
CHANGED
|
@@ -27,6 +27,37 @@ export class MongoEntityManager extends EntityManager {
|
|
|
27
27
|
getCollection(entityOrCollectionName) {
|
|
28
28
|
return this.getConnection().getCollection(entityOrCollectionName);
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* @inheritDoc
|
|
32
|
+
*/
|
|
33
|
+
async countBy(entityName, groupBy, options = {}) {
|
|
34
|
+
const em = this.getContext(false);
|
|
35
|
+
options = { ...options };
|
|
36
|
+
em.prepareOptions(options);
|
|
37
|
+
const meta = em.getMetadata().find(entityName);
|
|
38
|
+
const fields = Utils.asArray(groupBy);
|
|
39
|
+
if (options.having) {
|
|
40
|
+
throw new Error('The `having` option is not supported for MongoDB in `countBy`.');
|
|
41
|
+
}
|
|
42
|
+
await em.tryFlush(entityName, options);
|
|
43
|
+
const rawWhere = options.where;
|
|
44
|
+
const where = await em.processWhere(entityName, rawWhere ?? {}, options, 'read');
|
|
45
|
+
const renamedWhere = em.getDriver().renameFields(meta.class, where, true);
|
|
46
|
+
const fieldNames = fields.map(f => meta.properties[f]?.fieldNames?.[0] ?? f);
|
|
47
|
+
const groupId = fieldNames.length === 1 ? `$${fieldNames[0]}` : Object.fromEntries(fieldNames.map(f => [f, `$${f}`]));
|
|
48
|
+
const pipeline = [];
|
|
49
|
+
if (renamedWhere && Object.keys(renamedWhere).length > 0) {
|
|
50
|
+
pipeline.push({ $match: renamedWhere });
|
|
51
|
+
}
|
|
52
|
+
pipeline.push({ $group: { _id: groupId, count: { $sum: 1 } } });
|
|
53
|
+
const rows = await em.getDriver().aggregate(meta.class, pipeline, em.getTransactionContext());
|
|
54
|
+
const results = {};
|
|
55
|
+
for (const row of rows) {
|
|
56
|
+
const key = fieldNames.length === 1 ? String(row._id) : fieldNames.map(f => String(row._id[f])).join(Utils.PK_SEPARATOR);
|
|
57
|
+
results[key] = +row.count;
|
|
58
|
+
}
|
|
59
|
+
return results;
|
|
60
|
+
}
|
|
30
61
|
/**
|
|
31
62
|
* @inheritDoc
|
|
32
63
|
*/
|
package/MongoPlatform.js
CHANGED
|
@@ -73,9 +73,13 @@ export class MongoPlatform extends Platform {
|
|
|
73
73
|
return prop.kind === ReferenceKind.MANY_TO_MANY && prop.owner;
|
|
74
74
|
}
|
|
75
75
|
validateMetadata(meta) {
|
|
76
|
+
super.validateMetadata(meta);
|
|
76
77
|
if (meta.inheritanceType === 'tpt') {
|
|
77
78
|
throw MetadataError.tptNotSupportedByDriver(meta);
|
|
78
79
|
}
|
|
80
|
+
if (meta.triggers?.length > 0) {
|
|
81
|
+
throw MetadataError.triggersNotSupportedByDriver(meta);
|
|
82
|
+
}
|
|
79
83
|
const pk = meta.getPrimaryProps()[0];
|
|
80
84
|
if (pk && pk.fieldNames?.[0] !== '_id') {
|
|
81
85
|
throw MetadataError.invalidPrimaryKey(meta, pk, '_id');
|
|
@@ -21,6 +21,11 @@ export declare class MongoSchemaGenerator extends AbstractSchemaGenerator<MongoD
|
|
|
21
21
|
ensureIndexes(options?: EnsureIndexesOptions): Promise<void>;
|
|
22
22
|
private mapIndexProperties;
|
|
23
23
|
private createIndexes;
|
|
24
|
+
/**
|
|
25
|
+
* An explicit `options.partialFilterExpression` wins over `where` — this preserves the
|
|
26
|
+
* long-standing `options: { partialFilterExpression }` escape hatch.
|
|
27
|
+
*/
|
|
28
|
+
private applyPartialFilter;
|
|
24
29
|
private executeQuery;
|
|
25
30
|
private createUniqueIndexes;
|
|
26
31
|
private createPropertyIndexes;
|
package/MongoSchemaGenerator.js
CHANGED
|
@@ -132,10 +132,21 @@ export class MongoSchemaGenerator extends AbstractSchemaGenerator {
|
|
|
132
132
|
const properties = this.mapIndexProperties(index, meta);
|
|
133
133
|
const collection = this.connection.getCollection(meta.class);
|
|
134
134
|
if (Array.isArray(index.options) && index.options.length === 2 && properties.length === 0) {
|
|
135
|
-
|
|
135
|
+
// The array-form escape hatch passes raw [spec, options] to the driver; fold `where`
|
|
136
|
+
// into the options dict (on a clone, to avoid mutating the user's metadata).
|
|
137
|
+
const opts = { ...index.options[1] };
|
|
138
|
+
this.applyPartialFilter(opts, index.where, index.name, meta.className);
|
|
139
|
+
res.push([collection.collectionName, collection.createIndex(index.options[0], opts)]);
|
|
136
140
|
return;
|
|
137
141
|
}
|
|
138
142
|
if (index.options && properties.length === 0) {
|
|
143
|
+
// The plain escape hatch forwards `index.options` as the sole argument; there is
|
|
144
|
+
// no options slot for `partialFilterExpression`, so warn instead of silently dropping.
|
|
145
|
+
if (index.where != null) {
|
|
146
|
+
this.config
|
|
147
|
+
.getLogger()
|
|
148
|
+
.warn('schema', `Index '${index.name ?? '(unnamed)'}' on entity '${meta.className}': \`where\` was ignored because \`options\` is used as the raw index spec and leaves no slot for \`partialFilterExpression\` — pass \`options: [spec, { partialFilterExpression }]\` (array form) to combine both.`);
|
|
149
|
+
}
|
|
139
150
|
res.push([collection.collectionName, collection.createIndex(index.options)]);
|
|
140
151
|
return;
|
|
141
152
|
}
|
|
@@ -162,10 +173,30 @@ export class MongoSchemaGenerator extends AbstractSchemaGenerator {
|
|
|
162
173
|
if (index.invisible) {
|
|
163
174
|
indexOptions.hidden = true;
|
|
164
175
|
}
|
|
176
|
+
this.applyPartialFilter(indexOptions, index.where, index.name, meta.className);
|
|
165
177
|
res.push([collection.collectionName, this.executeQuery(collection, 'createIndex', fieldOrSpec, indexOptions)]);
|
|
166
178
|
});
|
|
167
179
|
return res;
|
|
168
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* An explicit `options.partialFilterExpression` wins over `where` — this preserves the
|
|
183
|
+
* long-standing `options: { partialFilterExpression }` escape hatch.
|
|
184
|
+
*/
|
|
185
|
+
applyPartialFilter(options, where, indexName, entityName) {
|
|
186
|
+
if (where == null) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (options.partialFilterExpression != null) {
|
|
190
|
+
this.config
|
|
191
|
+
.getLogger()
|
|
192
|
+
.warn('schema', `Index '${indexName ?? '(unnamed)'}' on entity '${entityName}': both \`where\` and \`options.partialFilterExpression\` are set; \`options.partialFilterExpression\` wins.`);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (typeof where === 'string') {
|
|
196
|
+
throw new Error(`Index '${indexName ?? '(unnamed)'}' on entity '${entityName}': string \`where\` is not supported on MongoDB; pass an object/FilterQuery (it maps to MongoDB's \`partialFilterExpression\`).`);
|
|
197
|
+
}
|
|
198
|
+
options.partialFilterExpression = where;
|
|
199
|
+
}
|
|
169
200
|
async executeQuery(collection, method, ...args) {
|
|
170
201
|
const now = Date.now();
|
|
171
202
|
return collection[method](...args).then((res) => {
|
|
@@ -188,14 +219,13 @@ export class MongoSchemaGenerator extends AbstractSchemaGenerator {
|
|
|
188
219
|
return o;
|
|
189
220
|
}, {});
|
|
190
221
|
const collection = this.connection.getCollection(meta.class);
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
]);
|
|
222
|
+
const indexOptions = {
|
|
223
|
+
name: index.name,
|
|
224
|
+
unique: true,
|
|
225
|
+
...index.options,
|
|
226
|
+
};
|
|
227
|
+
this.applyPartialFilter(indexOptions, index.where, index.name, meta.className);
|
|
228
|
+
res.push([collection.collectionName, this.executeQuery(collection, 'createIndex', fieldOrSpec, indexOptions)]);
|
|
199
229
|
});
|
|
200
230
|
return res;
|
|
201
231
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikro-orm/mongodb",
|
|
3
|
-
"version": "7.1.0-dev.
|
|
3
|
+
"version": "7.1.0-dev.21",
|
|
4
4
|
"description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"data-mapper",
|
|
@@ -47,13 +47,13 @@
|
|
|
47
47
|
"copy": "node ../../scripts/copy.mjs"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"mongodb": "7.
|
|
50
|
+
"mongodb": "7.2.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@mikro-orm/core": "^7.0.
|
|
53
|
+
"@mikro-orm/core": "^7.0.12"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
|
-
"@mikro-orm/core": "7.1.0-dev.
|
|
56
|
+
"@mikro-orm/core": "7.1.0-dev.21"
|
|
57
57
|
},
|
|
58
58
|
"engines": {
|
|
59
59
|
"node": ">= 22.17.0"
|