Skip to content

Commit 00874e9

Browse files
committed
add estimetedDocumentCount and countDocuments in Collection and DocumentCollection
1 parent f08e636 commit 00874e9

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

.changeset/red-ways-check.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"effect-mongodb": patch
3+
---
4+
5+
Add estimetedDocumentCount and countDocuments in Collection and DocumentCollection

packages/effect-mongodb/src/Collection.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ import type {
1111
AggregateOptions,
1212
BulkWriteOptions,
1313
Collection as MongoCollection,
14+
CountDocumentsOptions,
1415
CreateIndexesOptions,
1516
DeleteOptions,
1617
DeleteResult,
1718
Document,
1819
DropCollectionOptions,
1920
DropIndexesOptions,
21+
EstimatedDocumentCountOptions,
2022
FindOneAndReplaceOptions,
2123
FindOptions as MongoFindOptions,
2224
IndexDescription,
@@ -493,4 +495,51 @@ export const aggregate: {
493495
})
494496
)
495497

498+
export const estimatedDocumentCount: {
499+
(
500+
options?: EstimatedDocumentCountOptions
501+
): <A extends Document, I extends Document, R>(
502+
collection: Collection<A, I, R>
503+
) => Effect.Effect<number, MongoError.MongoError, R>
504+
<A extends Document, I extends Document, R>(
505+
collection: Collection<A, I, R>,
506+
options?: EstimatedDocumentCountOptions
507+
): Effect.Effect<number, MongoError.MongoError, R>
508+
} = F.dual(
509+
(args) => isCollection(args[0]),
510+
<A extends Document, I extends Document, R>(
511+
collection: Collection<A, I, R>,
512+
options?: EstimatedDocumentCountOptions
513+
): Effect.Effect<number, MongoError.MongoError, R> =>
514+
F.pipe(
515+
Effect.promise(() => collection.collection.estimatedDocumentCount(options)),
516+
Effect.catchAllDefect(MongoError.mongoErrorDie<number>("estimatedDocumentCount error"))
517+
)
518+
)
519+
520+
export const countDocuments: {
521+
<I extends Document>(
522+
filter?: Filter<I>,
523+
options?: CountDocumentsOptions
524+
): <A extends Document, R>(
525+
collection: Collection<A, I, R>
526+
) => Effect.Effect<number, MongoError.MongoError, R>
527+
<A extends Document, I extends Document, R>(
528+
collection: Collection<A, I, R>,
529+
filter?: Filter<I>,
530+
options?: CountDocumentsOptions
531+
): Effect.Effect<number, MongoError.MongoError, R>
532+
} = F.dual(
533+
(args) => isCollection(args[0]),
534+
<A extends Document, I extends Document, R>(
535+
collection: Collection<A, I, R>,
536+
filter?: Filter<I>,
537+
options?: CountDocumentsOptions
538+
): Effect.Effect<number, MongoError.MongoError, R> =>
539+
F.pipe(
540+
Effect.promise(() => collection.collection.countDocuments(filter, options)),
541+
Effect.catchAllDefect(MongoError.mongoErrorDie<number>("countDocuments error"))
542+
)
543+
)
544+
496545
const isCollection = (x: unknown) => x instanceof Collection

packages/effect-mongodb/src/DocumentCollection.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ import type {
1010
AggregateOptions,
1111
BulkWriteOptions,
1212
Collection as MongoCollection,
13+
CountDocumentsOptions,
1314
CreateIndexesOptions,
1415
DeleteOptions,
1516
DeleteResult,
1617
Document,
1718
DropCollectionOptions,
1819
DropIndexesOptions,
20+
EstimatedDocumentCountOptions,
1921
Filter,
2022
FindOneAndReplaceOptions,
2123
FindOptions,
@@ -449,6 +451,53 @@ export const aggregate: {
449451
})
450452
)
451453

454+
export const estimatedDocumentCount: {
455+
(
456+
options?: EstimatedDocumentCountOptions
457+
): (
458+
collection: DocumentCollection
459+
) => Effect.Effect<number, MongoError.MongoError>
460+
(
461+
collection: DocumentCollection,
462+
options?: EstimatedDocumentCountOptions
463+
): Effect.Effect<number, MongoError.MongoError>
464+
} = F.dual(
465+
(args) => isDocumentCollection(args[0]),
466+
(
467+
collection: DocumentCollection,
468+
options?: EstimatedDocumentCountOptions
469+
): Effect.Effect<number, MongoError.MongoError> =>
470+
F.pipe(
471+
Effect.promise(() => collection.collection.estimatedDocumentCount(options)),
472+
Effect.catchAllDefect(MongoError.mongoErrorDie<number>("estimatedDocumentCount error"))
473+
)
474+
)
475+
476+
export const countDocuments: {
477+
(
478+
filter?: Filter<Document>,
479+
options?: CountDocumentsOptions
480+
): (
481+
collection: DocumentCollection
482+
) => Effect.Effect<number, MongoError.MongoError>
483+
(
484+
collection: DocumentCollection,
485+
filter?: Filter<Document>,
486+
options?: CountDocumentsOptions
487+
): Effect.Effect<number, MongoError.MongoError>
488+
} = F.dual(
489+
(args) => isDocumentCollection(args[0]),
490+
(
491+
collection: DocumentCollection,
492+
filter?: Filter<Document>,
493+
options?: CountDocumentsOptions
494+
): Effect.Effect<number, MongoError.MongoError> =>
495+
F.pipe(
496+
Effect.promise(() => collection.collection.countDocuments(filter, options)),
497+
Effect.catchAllDefect(MongoError.mongoErrorDie<number>("countDocuments error"))
498+
)
499+
)
500+
452501
export const typed: {
453502
<A extends Document, I extends Document = A, R = never>(
454503
schema: Schema.Schema<A, I, R>

0 commit comments

Comments
 (0)