Releases: FerretDB/FerretDB
v1.3.0
New Features 🎉
- Implement positional operator in projection by @chilagrow in #2688
- Implement
logout
command by @kropidlowsky in #2639
Fixed Bugs 🐛
- Fix reporting of updates availability by @rumyantseva in #2653
- Fix
.deb
and.rpm
package versions by @AlekSi in #2725 - Allow query to be type null in
distinct
command by @b1ron in #2658 - Fix path collisions for multiple update operators by @noisersup in #2713
Enhancements 🛠
- Fix
_id
formatting in update error messages by @noisersup in #2711
Documentation 📄
- Add release blog post for FerretDB version 1.2.0 by @Fashander in #2686
- Update
$project
in Supported Commands by @Fashander in #2710 - Add formatter for markdown tables by @rumyantseva in #2693
- Reformat and lint more documentation files by @AlekSi in #2740
- Document aggregation operations by @Fashander in #2672
- Improve authentication documentation by @chilagrow in #2737
Other Changes 🤖
- Refactor
gitBinaryMaskParam
function by @w84thesun in #2634 - Add
distinct
command errors test by @w84thesun in #2687 - Clarify what's left in handling OP_MSG checksum by @rumyantseva in #2677
- Return a better error for authentication problems by @AlekSi in #2703
- Aggregation operators refactor by @noisersup in #2664
- Implement
envtool version
command by @jeremyphua in #2714 - Make
go test -list=.
work by @AlekSi in #2718 - Include Hana in integration tests by @polyal in #2715
- Bump deps by @AlekSi in #2702
- Add
logout
test for all backend by @chilagrow in #2726 - Fix telemetry reporter logging by @AlekSi in #2707
- Add supported aggregations to the
buildInfo
output by @kropidlowsky in #2716 - Add aggregation operator tests by @chilagrow in #2724
- Add more consistency to table tests' field names by @rumyantseva in #2717
- Don't use
sjson.GetTypeOfValue
where it shouldn't be used by @noisersup in #2728 - Unify test file names by @w84thesun in #2709
- Make
testFindAndModifyCompat
work withcompatTestCaseResultType
by @rumyantseva in #2739 - Bump deps by @AlekSi in #2745
- Call
ListSpecifications
driver's method in tests to check indexes by @rumyantseva in #2746 - Simplify
CountIterator
by @AlekSi in #2759 - Check for
nil
values in iterators explicitly by @AlekSi in #2758 - Trigger GC to run finalizers by @AlekSi in #2771
- Update
golangci-lint
config by @AlekSi in #2772 - Remove the need to call
DeepCopy
in some places by @AlekSi in #2774 - Clean-up
lazyerrors
, use them in more places by @AlekSi in #2770 - Replace document slices with iterators by @noisersup in #2730
- Fix
findAndModify
tests for MongoDB 6.0.6 by @chilagrow in #2779 - Implement a few command stubs by @AlekSi in #2777
- Add more handler tests by @w84thesun in #2769
- Remove
findAndModify
integration tests with$
prefixed key for MongoDB 6.0.6 compatibility by @chilagrow in #2785
New Contributors
- @jeremyphua made their first contribution in #2714
v1.2.1
v1.2.0
What's Changed
This release includes a highly experimental and unsupported SQLite backend. It will be improved in future releases.
Fixed Bugs 🐛
- Fix compatibility with C# driver by @b1ron in #2613
- Fix a bug with unset field sorting by @rumyantseva in #2638
- Return
int64
values fordbStats
andcollStats
by @AlekSi in #2642 - Return command error from
findAndModify
by @chilagrow in #2646 - Fix index creation on nested fields by @wqhhust in #2637
Enhancements 🛠
- Perform
insertMany
in a single transaction by @raeidish in #2532 - Relax PostgreSQL connection checks by @AlekSi in #2602
- Cleanup
insert
command by @noisersup in #2609 - Support dot notation in projection by @chilagrow in #2536
Documentation 📄
- Add FerretDB v1.1.0 release blog post by @Fashander in #2594
- Update blog post image for 1.1.0 by @AlekSi in #2601
- Add documentation for
.rpm
packages by @AlekSi in #2604 - Fix a typo in a blog post by @AlekSi in #2611
- Fix typo on RPM package file name by @christiano in #2628
- Update documentation formatting by @AlekSi in #2640
- Add blog post on "Meteor and FerretDB" by @Fashander in #2654
Other Changes 🤖
- Bump deps by @AlekSi in #2592
- Remove
TODO
comment for closed issue by @adetunjii in #2573 - Add experimental integration test flag for pushdown sorting by @noisersup in #2595
- Extract handler parameters from corresponding structure by @w84thesun in #2513
- Add
shell
subcommands (mkdir
,rmdir
) inenvtool
by @kropidlowsky in #2596 - Add basic postcondition checker for errors by @AlekSi in #2607
- Add
sqlite
handler stub by @AlekSi in #2608 - Make protocol-level crashes easier to understand by @AlekSi in #2610
- Simplify
envtool shell
subcommands by @AlekSi in #2614 - Cleanup old Docker images by @wqhhust in #2533
- Fix exponential backoff minimum duration by @noisersup in #2578
- Fix
count
'squery
parameter by @w84thesun in #2622 - Add a README.md file for assertions by @b1ron in #2569
- Use
ExtractParameters
in handlers by @w84thesun in #2620 - Verify
OP_MSG
message checksum by @adetunjii in #2540 - Separate codebase for aggregation
$project
and queryprojection
by @chilagrow in #2631 - Implement
envtool shell read
subcommand by @wqhhust in #2626 - Cleanup projection by @chilagrow in #2641
- Add common backend interface prototype by @AlekSi in #2619
- Add SQLite handler flags by @AlekSi in #2651
- Add tests for aggregation expressions with dots in
$group
aggregation stage by @rumyantseva in #2636 - Implement some SQLite backend commands by @AlekSi in #2655
- Fix tests to assert correct error by @chilagrow in #2546
- Aggregation expression refactor by @noisersup in #2644
- Move common commands to
commoncommands
by @AlekSi in #2660 - Add basic observability into backend interfaces by @AlekSi in #2661
- Implement metadata storage by @w84thesun in #2656
- Add
Query
to the common backend interface by @AlekSi in #2662 - Implement query request for SQLite backend by @w84thesun in #2665
- Add test case for read in envtools by @wqhhust in #2657
- Run integration tests for
sqlite
handler by @AlekSi in #2666 - Bump deps by @AlekSi in #2671
- Create SQLite directory if needed by @AlekSi in #2673
- Implement SQLite
update
anddelete
commands by @w84thesun in #2674
New Contributors
- @adetunjii made their first contribution in #2573
- @christiano made their first contribution in #2628
v1.1.0
New Features 🎉
- Implement projection fields assignment by @w84thesun in #2484
- Implement
$project
pipeline aggregation stage by @w84thesun in #2383 - Handle
create
anddrop
commands in Hana handler by @polyal in #2458 - Implement
renameCollection
command by @b1ron in #2343
Fixed Bugs 🐛
- Fix
findAndModify
for$exists
query operator by @chilagrow in #2385 - Fix
SchemaStats
to return correct data by @rumyantseva in #2426 - Fix
findAndModify
for$set
operator setting_id
by @chilagrow in #2507 - Fix
update
for conflicting dot notation paths by @chilagrow in #2521 - Fix
$
path errors for sort by @chilagrow in #2534 - Fix empty projections panic by @w84thesun in #2562
- Fix
runCommand
's inserts of documents without_id
s by @kropidlowsky in #2574
Enhancements 🛠
- Validate
scale
param fordbStats
andcollStats
correctly by @rumyantseva in #2418 - Allow database name contain uppercase characters by @syasyayas in #2504
- Add identifying Arch Linux version in
hostInfo
command by @kropidlowsky in #2525 - Handle absent
os-release
file by @kropidlowsky in #2541 - Improve handling of
os-release
files by @kropidlowsky in #2553
Documentation 📄
- Document test script by @chilagrow in #2353
- Use
draft
instead ofunlisted
by @AlekSi in #2372 - Make example docker compose file restart on failure by @noisersup in #2376
- Document how to get logs by @chilagrow in #2355
- Update writing guide by @Fashander in #2373
- Add comments to our documentation workflow by @AlekSi in #2390
- Add blogpost: Announcing FerretDB 1.0 GA - a truly Open Source MongoDB alternative by @AlekSi in #2397
- Update documentation for index options by @AlekSi in #2417
- Add query pushdown documentation by @noisersup in #2339
- Update README.md to link to SSPL by @cooljeanius in #2420
- Improve documentation for Docker by @AlekSi in #2396
- Add more detailed PR guides in CONTRIBUTING.md by @AuruTus in #2435
- Remove a few double spaces by @AlekSi in #2431
- Add image for a future blog post by @AlekSi in #2453
- Add blogpost - Using FerretDB with Studio 3T by @AlekSi in #2454
- Fix YAML indentation by @AlekSi in #2455
- Update blog post on Using FerretDB with Studio3T by @Fashander in #2457
- Document
createIndexes
,listIndexes
, anddropIndexes
commands by @Fashander in #2488
Other Changes 🤖
See CHANGELOG.md.
New Contributors
- @cooljeanius made their first contribution in #2420
- @j0holo made their first contribution in #2419
- @AuruTus made their first contribution in #2435
- @craigpastro made their first contribution in #2439
- @afiskon made their first contribution in #2456
- @syasyayas made their first contribution in #2499
- @raeidish made their first contribution in #2518
- @polyal made their first contribution in #2458
- @wqhhust made their first contribution in #2485
v1.0.0
What's Changed
We are delighted to announce the first major release of FerretDB!
FerretDB 1.0 GA includes all the core functionality of a document database required for production use. It has improved performance and stability over previous releases. Since our Beta release in January, we’ve added some notable features such as support for aggregation pipelines, indexes, and authentication. In the meantime, we've also pushed more queries to the backend, optimizing them for faster performance.
With FerretDB, you have an easy-to-use, developer-friendly, open-source, and production-ready replacement for MongoDB workloads.
Read more in our blog post.
New Features 🎉
- Support
$sum
accumulator of$group
aggregation by @chilagrow in #2292 - Implement
createIndexes
command by @rumyantseva in #2244 - Add basic
getMore
command by @AlekSi in #2309 - Implement
dropIndexes
command by @chilagrow in #2313 - Implement
$limit
aggregation pipeline stage by @noisersup in #2270 - Add partial support for
collStats
,dbStats
anddataSize
by @AlekSi in #2322 - Implement
$skip
aggregation pipeline stage by @w84thesun in #2310 - Implement
$unwind
aggregation pipeline stage by @noisersup in #2294 - Support
count
andstorageStats
fields in$collStats
aggregation pipeline stage by @rumyantseva in #2338
Fixed Bugs 🐛
- Fix dot notation negative index errors by @w84thesun in #2246
- Apply
skip
beforelimit
by @AlekSi in #2351
Documentation 📄
- Update supported command for
$sum
aggregation operator by @chilagrow in #2318 - Add supported shells and GUIs images by @AlekSi in #2323
- Publish FerretDB v0.9.4 blog post by @Fashander in #2268
- Use dashes instead of underscores or spaces by @AlekSi in #2329
- Update documentation sidebar by @Fashander in #2347
- Update FerretDB descriptions by @AlekSi in #2281
- Improve flags documentation by @AlekSi in #2331
- Describe supported fields for
$collStats
aggregation stage by @rumyantseva in #2352
Other Changes 🤖
- Use iterators for
sort
,limit
,skip
, andprojection
by @AlekSi in #2254 - Bump dependencies by @AlekSi in #2307
- Improve resource tracking by @AlekSi in #2319
- Add tests for
find
's andcount
'sskip
argument by @w84thesun in #2325 - Close iterator properly by @AlekSi in #2333
- Improve large numbers initialization in test data by @noisersup in #2324
- Ignore
unique
index option for now by @AlekSi in #2350
v0.9.4
New Features 🎉
- Support dot notation in sorting by @rumyantseva in #2156
- Add support for
$each
modifier to$addToSet
array update operator by @w84thesun in #2187 - Add support for
$each
modifier to$push
array update operator by @w84thesun in #2202 - Add support for
$pull
array update operator by @w84thesun in #2222
Fixed Bugs 🐛
- Fix
hana
andtigris
handlers initialization by @AlekSi in #2234 - Fix long overflow detection on
$mul
by @noisersup in #2232 - Fix pushdown for large double values by @noisersup in #2163
Enhancements 🛠
- Support
skip
argument forfind
andcount
by @rumyantseva in #2193 - Support query pushdown for
$match
aggregation stage by @chilagrow in #2199 - Rework integration test setup for validator by @chilagrow in #2225
- Change collection names mangling for PostgreSQL by @chilagrow in #2239
- Implement
nameOnly
forlistCollections
command by @kropidlowsky in #2247 - Extract dollar path field expression to types package by @chilagrow in #2263
Documentation 📄
- Prevent confusing messages for embedded FerretDB by @AlekSi in #2209
- Add new FerretDB v0.9.3 release blogpost by @Fashander in #2201
- Add documentation for
all-in-one
Docker image by @AlekSi in #2215 - Tweak Docker docs a bit by @AlekSi in #2228
- Add section about field update operators by @Fashander in #2180
- Update telemetry information by @Fashander in #2243
- Add basic security policy by @AlekSi in #2242
- Add new blog post - MongoDB vs PostgreSQL by @Fashander in #2146
- Document array update operator by @Fashander in #2237
Other Changes 🤖
- Merge and speedup packages building by @AlekSi in #2195
- Provide "all-in-one" Docker image by @AlekSi in #2183
- Improve logging of retries by @AlekSi in #2192
- Split
TestQueryCompatRunner
back into separate tests by @chilagrow in #2189 - Fix telemetry tag and improve unimplemented error in aggregation by @chilagrow in #2198
- Improve build cache usage by @AlekSi in #2197
- Add CI configuration for Hana by @AlekSi in #2194
- Use
runit
for all-in-one Docker image by @AlekSi in #2203 - Pass
struct
s by pointers by @AlekSi in #2221 - Skip a
$mod
test for arm64 by @rumyantseva in #2223 - Fix
env-data
Taskfile by @chilagrow in #2211 - Make
listIndexes
use data from the database by @rumyantseva in #2214 - Tweak dependabot config by @AlekSi in #2233
- Filter documents with iterators by @AlekSi in #2245
- Add a few query tests by @AlekSi in #2260
- Fix traffic recording by @AlekSi in #2267
- Cleanup unimplemented and ignored parameters by @AlekSi in #2258
- Bump deps by @AlekSi in #2264
- Collection deletion and metadata refactoring by @rumyantseva in #2224
- Update diff.md for database name differences by @chilagrow in #2274
- Remove indexes from
DocumentsIterator
by @AlekSi in #2278 - Bump Tigris to 1.0.0-beta.51 by @AlekSi in #2277
New Contributors
- @kropidlowsky made their first contribution in #2247
v0.9.3
New Features 🎉
- Implement
$sort
aggregation pipeline stage by @chilagrow in #2093 - Support aggregation pipeline for Tigris by @chilagrow in #2085
- Pushdown
$eq
query operator by @noisersup in #1880 - Pushdown
$ne
query operator for PostgreSQL by @noisersup in #2145 - Create unqiue index for
_id
automatically by @rumyantseva in #2048 - Support
$group
aggregation stage by @chilagrow in #2151
Fixed Bugs 🐛
- Add dot notation support for
$max
and$min
by @w84thesun in #2072 - Fix
$mul
operator handling dot notation by @w84thesun in #2094 - Add lowercase variant of
dbstats
by @b1ron in #2119 - Fix querying an embedded field in array by @chilagrow in #2030
- Fix dot notation errors by @w84thesun in #2122
- Make
$pullAll
remove all instances from the existing array by @b1ron in #2066 - Fix
saslStart
for particular clients by @yu-re-ka in #2164
Enhancements 🛠
- Relax validation rules a bit by @AlekSi in #2009
- Allow empty strings pushdown for Tigris by @noisersup in #2110
- Pushdown
bool
values by @noisersup in #2143 - Pushdown
date
values by @noisersup in #2162
Documentation 📄
- Add blog post on FerretDB v0.92 by @Fashander in #2067
- Restructure documentation by @Fashander in #2073
- Improve social preview for Security page by @AlekSi in #2091
- Update aggregation in supported command document by @chilagrow in #2154
- Document explicit telemetry sharing by @AlekSi in #2169
- Update supported command document for
$group
aggregation operator by @chilagrow in #2188
Other Changes 🤖
- Fix
SkipForTigrisWithReason
helper by @w84thesun in #2061 - Add dot notation test cases for update operators by @w84thesun in #2047
- Push Docker images to Docker Hub by @AlekSi in #2059
- Temporarily remove pushdown for dot notation by @noisersup in #2068
- Set
retention-days
for all CI artifacts by @AlekSi in #2087 - Bump deps by @AlekSi in #2041
- Use Go 1.20 by @AlekSi in #2098
- Small cleanups by @AlekSi in #2107
- Update CODEOWNERS for the Hana handler by @AlekSi in #2096
- Initial setup of
hana
handler by @lucboj in #2071 - Checkout named branch by @AlekSi in #2112
- Skip docs build if no docs were changed by @w84thesun in #2095
- Remove CI optimization that does not work by @AlekSi in #2113
- Bump deps by @AlekSi in #2148
- Add aggregation pipeline compat tests and fix errors by @chilagrow in #2099
- Test that version is set correctly by @AlekSi in #2152
- Add connection to HANA by @lucboj in #2120
- Bump deps, minor cleanup by @AlekSi in #2176
- Refactor common
saslStart
code by @AlekSi in #2181 - Use
stringer
for "enums" by @AlekSi in #2144 - Rework build by @AlekSi in #2177
- Disable race detector on arm64 by @AlekSi in #2182
New Contributors
v0.9.2
New Features 🎉
- Support
listIndexes
command by @rumyantseva in #1960 - Add support for
$addToSet
array update operator by @w84thesun in #2004 - Add
$pullAll
array update operator by @w84thesun in #2032 - Add Tigris authentication support by @AlekSi in #2040
Fixed Bugs 🐛
- Add support for
create
withcapped: false
by @AlekSi in #1978 - Do not log the latest version if it's unknown by @AlekSi in #1967
Enhancements 🛠
- Add a flag for disabling query pushdown by @noisersup in #1963
- Disable query pushdown if the corresponding flag is set by @rumyantseva in #2003
Documentation 📄
- Bump deps by @AlekSi in #1976
- Add blog post on FerretDB v0.9.1 by @Fashander in #1965
- Set up analytics for documentation and blog by @Fashander in #2010
- Add section for evaluation query operators -
$mod
and$regex
by @Fashander in #1941 - Embedded FerretDB documentation - examples improvements by @rumyantseva in #2017
- Do not specify Docker Compose version by @AlekSi in #2023
- Document bitwise query operators by @Fashander in #2042
- Update documentation definitions for operators by @Fashander in #2016
Other Changes 🤖
- Build multiple Docker images for git tags by @AlekSi in #1991
- Enable array tests for Tigris by @w84thesun in #1966
- Store cursors in
ConnInfo
by @AlekSi in #1998 - Bump Go to 1.19.6 by @AlekSi in #1999
- Bump more dependencies by @AlekSi in #1981
- Bump more deps, update Dependabot config by @AlekSi in #2002
- Simplify pushdown disabling logic by @AlekSi in #2008
- Extract more
find
command parameters by @AlekSi in #2006 - Bump Tigris version to
1.0.0-beta.38
by @rumyantseva in #2011 - Refactor
types.NewPathFromString
to return(Path, error)
by @w84thesun in #1994 - Bump
golang.org/x/net
version to 0.7.0 intools/go.mod
by @chilagrow in #2018 - Bump deps by @AlekSi in #2022
- Refactor integration tests by @AlekSi in #1925
- Simplify fields sorting, add TODO by @AlekSi in #2039
- Run
task testjs
on CI by @AlekSi in #2031 - Return a proper error when a document with duplicate
_id
is sent forinsert
by @rumyantseva in #2024
v0.9.1
New Features 🎉
- Support Tigris pushdowns for numbers by @noisersup in #1842
- Pushdown Tigris queries with dot notation by @noisersup in #1908
Fixed Bugs 🐛
- Fix
$pop
operator error handling of non-existent path by @chilagrow in #1907 - Fix SASL response for
PLAIN
authentication by @b1ron in #1942 - Fix key ordering on document replacing by @noisersup in #1946
Documentation 📄
- Add blog post on new FerretDB release by @Fashander in #1893
- Bump deps by @AlekSi in #1902
- Fix broken link by @Fashander in #1918
- Add blog post on "MongoDB Alternatives: 5 Database Alternatives to MongoDB for 2023" by @Fashander in #1911
Other Changes 🤖
- Use multiple Tigris instances to run tests by @chilagrow in #1878
- Assorted internal tweaks by @AlekSi in #1909
- Bump Tigris by @AlekSi in #1916
- Add simple
otel
tracing to collect data from tests by @rumyantseva in #1863 - Remove unused parameter by @AlekSi in #1919
- Rework on integration test setup by @chilagrow in #1857
- Add
iterator.WithClose
helper by @AlekSi in #1947 - Tweak CI settings by @AlekSi in #1948
- Rename function, add TODO by @AlekSi in #1955
- Remove
skipTigrisPushdown
from tests by @noisersup in #1957 - Implement Tigris query iterator by @w84thesun in #1924
v0.9.0 Developer Preview
What's Changed
We are pleased to announce our first Developer Preview release!
This release adds an initial implementation of aggregation pipelines. For now, only the $match
and $count
stages are implemented. Additional stages will be implemented in future releases.
This release also pushes more filtering queries to the backend, significantly improving their speed. Again, more will be implemented in future releases.
New Features 🎉
- Support
$mul
field update operator by @chilagrow in #1760 - Support
$push
array update operator by @rumyantseva in #1819 - Support PostgreSQL pushdowns for numbers by @noisersup in #1809
- Pushdown SQL queries with dot notation by @noisersup in #1864
- Initial support for aggregation pipelines by @AlekSi in #1860
Fixed Bugs 🐛
- Fix error types and array handling when dot notation is used with
$set
operator by @rumyantseva in #1795 - Fix
$inc
operator panics for non-existing array index by @chilagrow in #1787 - Fix
$set
operator to apply correct comparison by @chilagrow in #1814
Enhancements 🛠
- Set default
pool_max_conns
to 20 for PostgreSQL by @jkoenig134 in #1852
Documentation 📄
- Blog and documentation configuration improvements by @rumyantseva in #1799
- Fix internal links and images by @Fashander in #1796
- Bump ferretdb/docusaurus-docs from 2.2.0-2 to 2.2.0-3 in /build/deps by @dependabot in #1823
- Tweak documentation about flags by @AlekSi in #1820
- Add blog post about FerretDB v0.8.1 release by @Fashander in #1813
- Add blog post on FerretDB beta release 0.8.0 by @Fashander in #1815
- Add basic documentation writing guide by @AlekSi in #1826
- Update docker deployment documentation by @noisersup in #1817
- Reformat Markdown tables by @AlekSi in #1847
- Reformat blog and documentation setup by @Fashander in #1839
- Clarify what command statistics we gather by @AlekSi in #1861
- Add blog post on "How FerretDB fetches data (About query pushdown)" by @Fashander in #1853
- Add content creation process for documentation and blog by @Fashander in #1859
- Mention that there is no configuration file by @AlekSi in #1879
- Truncate blog post display by @Fashander in #1874
Other Changes 🤖
- Simplify
types.Array
Append
signature by @w84thesun in #1793 - Integrate
explain
into tests by @noisersup in #1790 - Add
package.txt
stub by @AlekSi in #1806 - Remove lazy connection pools by @AlekSi in #1812
- Add Go execution tracing for tests by @AlekSi in #1804
- Retry transaction more times and log retries by @AlekSi in #1818
- Migrate to Tigris
beta.27
by @rumyantseva in #1810 - Remove
ListenerOpts
from anotherListenerOpts
by @AlekSi in #1837 - Update CONTRIBUTING.md for test data tip by @chilagrow in #1832
- Tiny cleanups by @AlekSi in #1849
- Update development documentation by @AlekSi in #1851
- Make proper port visible on blog development server by @noisersup in #1862
- Ensure that we don't import extra dependencies by @AlekSi in #1856
- Extract handler errors into own package by @AlekSi in #1872
- Run query compat tests on same collection by @chilagrow in #1870
- Fix
InTransaction
helper's edge case by @AlekSi in #1881 - Improve insert in Tigris by using single query for multiple documents by @rumyantseva in #1871
- Unify reply code in handlers by @AlekSi in #1883
- Make iterator interface more strict by @AlekSi in #1882
New Contributors
- @jkoenig134 made their first contribution in #1852