Unsupported Features

  • $natural sort is not supported in this release.
  • mongorestore with the –dbpath is not supported. This mongorestore option writes bson files directly to the file system. SonarW’s files have a columnar format and bson files cannot be used by SonarW directly - they must be ingested by the database engine first.
  • Sonar doesn’t not support geoHaystack index and the geoSearch admin command that uses it.
  • Sonar doesn’t support any CRS in indexing GeoJSON data, it uses the default CRS.
  • Sonar doesn’t support compound geo indexes with other geo indexes.
  • Sonar doesn’t support compound text indexes.
  • Sonar doesn’t support the ‘moderate’ level in document validation. Use only ‘strict’ or ‘off’.
  • Changing $CURRENT in Aggregation Expressions is not supported.
  • Histograms in views are not supported.


Sonar support dates after Unix epoch. Correct results for dates before epoch are not guaranteed.


The following commands and flags are supported (and will be run) by SonarW but are implemented as no-ops and do nothing in SonarW:

  • $cmd.system.unlock
  • $isolated
  • $hint
  • cursor.min()
  • cursor.max()
  • Capped collections
  • fsync
  • $maxScan / cursor.maxScan()
  • collMod
  • allowDiskUse
  • Write Concern
  • server / client sessions


SonarW does not use indexes in the MongoDB sense, but rather indexes every field automatically using a Big Data index optimized for when data size is very large and without requiring large memory footprint. Sonar does not limit the size of an indexed field.

The only exception is text indexes. SonarW optimizes the speed of text search using a text search engine.

To create a text index:

db.txt.insert({a: "abc", b: 1})
db.txt.insert({a: "abc", b: 2})

This creates a text index which can later be used optimize text searches. Multiple columns within the given collection may be text indexed in this way. SonarW does not support wildcard column names using a text index.

To drop a text index from collection txt:


This drops a previously created text index.

To drop all text indexes:

db.runCommand({dropIndexes: 1})

This drops all previously created text indexes.

Or, you can delete all previously created text indexes:

db.runCommand({deleteIndexes: 1})

This deletes all previously created text indexes.

SonarW accepts but ignores the reIndex command.

Unsupported $text index features:

$language: none
$diacriticSensitive: true

Unsupported $text index options:

default_language: always defaults to english

Known Differences from MongoDB

  • SonarW does not preserve the order of inserted fields and follows the JSON definition that an objects is an ordered set of name/value pairs. Starting in MongoDB 2.6 MongoDB actively attempts to preserve the field order in a document. Since SonarW is a column store preserving order is impossible.
  • distinct in SonarW behaves like a $group. If a document has an array of strings SonarW will add this array as a distinct element while MongoDB will add each string in the array as an element to the array.
  • MaxTimeMS is used to limit the time a query takes before starting to return results. Once data is returned (e.g. in a cursor) no limit is placed on the time the client can do a getMore even when very long result sets are needed.
  • As a data warehouse, Sonarw processes large batches of data, even if a client requests a small cursor batch size, more results will be readily available.
  • To provide high update throughput, sonar implement update as a drop-insert, and does not lock the collection during updates, other clients querying the collection may see temporary results, until the update finishes.
  • Mongo will allow a bad view to be added to system.views, and then it will fail subsequent commands (list collections for example) on that database. Sonar does not allow to insert a bad / misconfigured view.
  • Sonar allows ‘$’ in field names, including as a pre-fix for top-level fields.