public MongoPersistenceEngine(MongoDatabase store, IDocumentSerializer serializer, MongoPersistenceOptions options)
        {
            if (store == null)
            {
                throw new ArgumentNullException("store");
            }

            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            _store      = store;
            _serializer = serializer;
            _options    = options;

            // set config options
            _commitSettings           = _options.GetCommitSettings();
            _snapshotSettings         = _options.GetSnapshotSettings();
            _streamSettings           = _options.GetStreamSettings();
            _insertCommitWriteConcern = _options.GetInsertCommitWriteConcern();

            _getLastCheckPointNumber = () => TryMongo(() =>
            {
                var max = PersistedCommits
                          .FindAll()
                          .SetFields(Fields.Include(MongoCommitFields.CheckpointNumber))
                          .SetSortOrder(SortBy.Descending(MongoCommitFields.CheckpointNumber))
                          .SetLimit(1)
                          .FirstOrDefault();

                return(max != null ? max[MongoCommitFields.CheckpointNumber].AsInt64 : 0L);
            });

            _getNextCheckpointNumber = () => new LongCheckpoint(_getLastCheckPointNumber() + 1L);

            _updateScript   = new BsonJavaScript("function (x){ return insertCommit(x);}");
            _checkpointZero = new LongCheckpoint(0);
        }