| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-08-07 | 1.9 kB | |
| v4.5.0 source code.tar.gz | 2026-08-07 | 852.7 kB | |
| v4.5.0 source code.zip | 2026-08-07 | 1.8 MB | |
| Totals: 3 Items | 2.7 MB | 0 | |
New Features
- Add an
existsfilter -where("field").exists()matches the documents which have the field, irrespective of its value;where("field").exists().not()matches those which do not. - A field explicitly set to
nullis present and matches. This is the case no existing filter could express:eq(null)andnotEq(null)cannot tell a missing field apart from one holdingnull, so "has this document been given a value for this field at all" was not answerable. - The filter deliberately does not extend
ComparableFilterand so always runs as a collection scan. A missing field and a field holdingnullare stored under the same null key in an index, so an index scan could not tell them apart and would disagree with a collection scan. - Embedded fields are addressed by their dotted path (
where("address.city").exists()), the same wayDocument.containsFieldresolves them.
Issue Fixes
- Fix JVM crash (SIGSEGV) in the RocksDB backend when a query pages past the end of a collection
EntrySet,KeySetandValueSetclose the nativeRocksIteratorthe first timehasNext()answersfalse, buthasNext()is idempotent by contract and a second call reachedisValid()on the freed handle.BoundedStream's skip loop exhausts the iterator and then the caller asks once more, so anyfind(..., skipBy(n))whose skip exceeds the number of remaining records hit it — an ordinary paging request, not an edge case. The existingcatch (AssertionError)only covered the case where assertions are enabled (-ea), which is how the tests ran but not how an application runs: without assertions the same call is aSIGSEGVinJava_org_rocksdb_RocksIterator_isValid0Jnithat takes the whole process down.hasNext()now returnsfalsewhen the iterator no longer owns its handle, so it never touches a closed iterator and stays idempotent.