コード例 #1
0
        public Task <IAsyncCursor <BsonDocument> > ListCollectionsAsync(ListCollectionsOptions options, CancellationToken cancellationToken)
        {
            var messageEncoderSettings = GetMessageEncoderSettings();
            var operation = new ListCollectionsOperation(_databaseNamespace, messageEncoderSettings)
            {
                Filter = options == null ? null : BsonDocumentHelper.FilterToBsonDocument <BsonDocument>(_settings.SerializerRegistry, options.Filter)
            };

            return(ExecuteReadOperation(operation, ReadPreference.Primary, cancellationToken));
        }
コード例 #2
0
 private BsonDocument ConvertFilterToBsonDocument(object filter)
 {
     return(BsonDocumentHelper.FilterToBsonDocument <TDocument>(_settings.SerializerRegistry, filter));
 }
コード例 #3
0
        public async Task <IAsyncCursor <TResult> > MapReduceAsync <TResult>(BsonJavaScript map, BsonJavaScript reduce, MapReduceOptions <TResult> options = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            Ensure.IsNotNull(map, "map");
            Ensure.IsNotNull(reduce, "reduce");

            options = options ?? new MapReduceOptions <TResult>();
            var outputOptions    = options.OutputOptions ?? MapReduceOutputOptions.Inline;
            var resultSerializer = ResolveResultSerializer <TResult>(options.ResultSerializer);

            if (outputOptions == MapReduceOutputOptions.Inline)
            {
                var operation = new MapReduceOperation <TResult>(
                    _collectionNamespace,
                    map,
                    reduce,
                    resultSerializer,
                    _messageEncoderSettings)
                {
                    Filter           = BsonDocumentHelper.FilterToBsonDocument <TDocument>(_settings.SerializerRegistry, options.Filter),
                    FinalizeFunction = options.Finalize,
                    JavaScriptMode   = options.JavaScriptMode,
                    Limit            = options.Limit,
                    MaxTime          = options.MaxTime,
                    Scope            = BsonDocumentHelper.ToBsonDocument(_settings.SerializerRegistry, options.Scope),
                    Sort             = BsonDocumentHelper.ToBsonDocument(_settings.SerializerRegistry, options.Sort),
                    Verbose          = options.Verbose
                };

                return(await ExecuteReadOperation(operation, cancellationToken));
            }
            else
            {
                var collectionOutputOptions = (MapReduceOutputOptions.CollectionOutput)outputOptions;
                var databaseNamespace       = collectionOutputOptions.DatabaseName == null ?
                                              _collectionNamespace.DatabaseNamespace :
                                              new DatabaseNamespace(collectionOutputOptions.DatabaseName);
                var outputCollectionNamespace = new CollectionNamespace(databaseNamespace, collectionOutputOptions.CollectionName);

                var operation = new MapReduceOutputToCollectionOperation(
                    _collectionNamespace,
                    outputCollectionNamespace,
                    map,
                    reduce,
                    _messageEncoderSettings)
                {
                    Filter           = BsonDocumentHelper.FilterToBsonDocument <TDocument>(_settings.SerializerRegistry, options.Filter),
                    FinalizeFunction = options.Finalize,
                    JavaScriptMode   = options.JavaScriptMode,
                    Limit            = options.Limit,
                    MaxTime          = options.MaxTime,
                    NonAtomicOutput  = collectionOutputOptions.NonAtomic,
                    Scope            = BsonDocumentHelper.ToBsonDocument(_settings.SerializerRegistry, options.Scope),
                    OutputMode       = collectionOutputOptions.OutputMode,
                    ShardedOutput    = collectionOutputOptions.Sharded,
                    Sort             = BsonDocumentHelper.ToBsonDocument(_settings.SerializerRegistry, options.Sort),
                    Verbose          = options.Verbose
                };

                var result = await ExecuteWriteOperation(operation, cancellationToken);

                var findOperation = new FindOperation <TResult>(
                    outputCollectionNamespace,
                    resultSerializer,
                    _messageEncoderSettings)
                {
                    MaxTime = options.MaxTime
                };

                // we want to delay execution of the find because the user may
                // not want to iterate the results at all...
                var deferredCursor = new DeferredAsyncCursor <TResult>(ct => ExecuteReadOperation(findOperation, ReadPreference.Primary, ct));
                return(await Task.FromResult(deferredCursor).ConfigureAwait(false));
            }
        }
コード例 #4
0
 private BsonDocument ConvertFilterToBsonDocument(object filter)
 {
     return(BsonDocumentHelper.FilterToBsonDocument <TResult>(_collection.Settings.SerializerRegistry, filter));
 }