In May 2013, Louis Chatriot began developing a lightweight embeddable and in memory database system that used a subset of the MongoDB API. It was completed in 2017 and now is on GitHub where individuals can contribute to the project by fixing several bugs but no additional features are being implemented currently. However, several separate teams have forked copies of the original NeDB database and began implementing their own ideas and additional features that weren't originally intended by the original creator.
NeDB supports indexing and helps provide a sufficient speed boost. It allows for indexing of any field, including those in nested documents. An index can be created at any point, even after data has been inserted. However, it is most efficient if done when the application is started because the index is created synchronously. The time to create an index is quite fast so it doesn't impact startup time too much. Additionally, indexes allow for the database to perform fast reads and writes.
NeDB does not support any isolation levels because no concurrency is guaranteed by the system.
Although MongoDB does support joins, NeDB does not because the only similarites between NeDB and MongoDB are the syntax for queries used in the API. Additionally, NeDB does not support joins because it is not a relational database but rather a document store database.
NeDB uses an append-only format, which means all updates and deletes will be added to the end of the datafile. This is done for performance reasons. The database is automatically compacted whenever it is loaded within an application. It is possible to run manual compaction, but it requires everything else to be paused and can take some time to complete. Therefore, most applications don't need to do this.
NeDB uses an embedded database system approach. The database system is on the application when it is being run because it is imported to the application as a library. Additionally, the system is used through API calls, which are the same as MongoDB.