feat(SmartDataDbDoc): add static .getCount({}) method

This commit is contained in:
Philipp Kunz 2024-04-15 18:34:13 +02:00
parent 5a2cc2406c
commit 552b344914
4 changed files with 24 additions and 2 deletions

View File

@ -199,12 +199,18 @@ tap.test('should store a new Truck', async () => {
const truck = new Truck('blue', 'MAN'); const truck = new Truck('blue', 'MAN');
await truck.save(); await truck.save();
const myTruck2 = await Truck.getInstance({ color: 'blue' }); const myTruck2 = await Truck.getInstance({ color: 'blue' });
expect(myTruck2.color).toEqual('blue');
myTruck2.color = 'red'; myTruck2.color = 'red';
await myTruck2.save(); await myTruck2.save();
const myTruck3 = await Truck.getInstance({ color: 'blue' }); const myTruck3 = await Truck.getInstance({ color: 'blue' });
console.log(myTruck3); expect(myTruck3).toBeNull();
}); });
tap.test('should return a count', async () => {
const truckCount = await Truck.getCount();
expect(truckCount).toEqual(1);
})
tap.test('should use a cursor', async () => { tap.test('should use a cursor', async () => {
const cursor = await Car.getCursor({}); const cursor = await Car.getCursor({});
let counter = 0; let counter = 0;

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartdata', name: '@push.rocks/smartdata',
version: '5.1.2', version: '5.2.0',
description: 'An advanced library for NoSQL data organization and manipulation using TypeScript with support for MongoDB, data validation, collections, and custom data types.' description: 'An advanced library for NoSQL data organization and manipulation using TypeScript with support for MongoDB, data validation, collections, and custom data types.'
} }

View File

@ -273,6 +273,11 @@ export class SmartdataCollection<T> {
await this.mongoDbCollection.deleteOne(identifiableObject); await this.mongoDbCollection.deleteOne(identifiableObject);
} }
public async getCount(filterObject: any) {
await this.init();
return this.mongoDbCollection.countDocuments(filterObject);
}
/** /**
* checks a Doc for constraints * checks a Doc for constraints
* if this.objectValidation is not set it passes. * if this.objectValidation is not set it passes.

View File

@ -181,6 +181,17 @@ export class SmartDataDbDoc<T extends TImplements, TImplements, TManager extends
await cursor.forEach(forEachFunction); await cursor.forEach(forEachFunction);
} }
/**
* returns a count of the documents in the collection
*/
public static async getCount<T>(
this: plugins.tsclass.typeFest.Class<T>,
filterArg: plugins.tsclass.typeFest.PartialDeep<T> = ({} as any)
) {
const collection: SmartdataCollection<T> = (this as any).collection;
return await collection.getCount(filterArg);
}
// INSTANCE // INSTANCE
/** /**