diff --git a/extra/mongodb/driver/driver.factor b/extra/mongodb/driver/driver.factor index 28e6e2c0aa..0dd73aeda8 100644 --- a/extra/mongodb/driver/driver.factor +++ b/extra/mongodb/driver/driver.factor @@ -225,6 +225,15 @@ M: mdb-query-msg find M: mdb-cursor find get-more ; +: each-chunk ( selector quot: ( seq -- ) -- ) + swap find + [ pick call( seq -- ) ] when* + [ swap each-chunk ] [ drop ] if* ; + +: find-all ( selector -- seq ) + [ V{ } clone ] dip + over '[ _ push-all ] each-chunk >array ; + : explain. ( mdb-query-msg -- ) t >>explain find nip . ; diff --git a/extra/mongodb/tuple/tuple.factor b/extra/mongodb/tuple/tuple.factor index 3b0392b70d..1568572bfb 100644 --- a/extra/mongodb/tuple/tuple.factor +++ b/extra/mongodb/tuple/tuple.factor @@ -38,6 +38,8 @@ SYNTAX: MDBTUPLE: [ drop-table ] [ ensure-table ] bi ; +DEFER: tuple>query + >upsert update ] assoc-each ; inline + +: prepare-tuple-query ( tuple/query -- query ) + dup mdb-query-msg? [ tuple>query ] unless ; + PRIVATE> : save-tuple-deep ( tuple -- ) @@ -83,12 +89,16 @@ PRIVATE> tuple>selector ; : select-tuple ( tuple/query -- tuple/f ) - dup mdb-query-msg? [ tuple>query ] unless + prepare-tuple-query find-one [ assoc>tuple ] [ f ] if* ; : select-tuples ( tuple/query -- cursor tuples/f ) - dup mdb-query-msg? [ tuple>query ] unless + prepare-tuple-query find [ assoc>tuple ] map ; +: select-all-tuples ( tuple/query -- tuples ) + prepare-tuple-query + find-all [ assoc>tuple ] map ; + : count-tuples ( tuple/query -- n ) dup mdb-query-msg? [ tuple>query ] unless count ;