// constructors public BulkDeleteOperationArgs( string collectionName, string databaseName, int maxBatchCount, int maxBatchLength, int maxDocumentSize, int maxWireDocumentSize, bool isOrdered, BsonBinaryReaderSettings readerSettings, IEnumerable<DeleteRequest> requests, WriteConcern writeConcern, BsonBinaryWriterSettings writerSettings) : base( collectionName, databaseName, maxBatchCount, maxBatchLength, maxDocumentSize, maxWireDocumentSize, isOrdered, readerSettings, requests.Cast<WriteRequest>(), writeConcern, writerSettings) { }
/// <summary> /// Creates a new instance of MongoDatabaseSettings. /// </summary> /// <param name="databaseName">The name of the database.</param> /// <param name="credentials">The credentials to access the database.</param> /// <param name="guidRepresentation">The representation for Guids.</param> /// <param name="readPreference">The read preference.</param> /// <param name="writeConcern">The write concern to use.</param> public MongoDatabaseSettings( string databaseName, MongoCredentials credentials, GuidRepresentation guidRepresentation, ReadPreference readPreference, WriteConcern writeConcern) { if (databaseName == null) { throw new ArgumentNullException("databaseName"); } if (databaseName == "admin" && credentials != null && !credentials.Admin) { throw new ArgumentOutOfRangeException("credentials", "Credentials for the admin database must have the admin flag set to true."); } if (readPreference == null) { throw new ArgumentNullException("readPreference"); } if (writeConcern == null) { throw new ArgumentNullException("writeConcern"); } _databaseName = databaseName; _credentials = credentials; _guidRepresentation = guidRepresentation; _readPreference = readPreference; _writeConcern = writeConcern; }
public MongoImpl(MongoServer connection, WriteConcern writeConcern) { this.writeConcern = writeConcern; Helpers.Random.Value.NextBytes(initialValue); collection = connection.GetDatabase(typeof (SomeDocument).Name).GetCollection<SomeDocument>(typeof (SomeDocument).Name); }
// constructors public BulkMixedWriteOperation( Action<InsertRequest> assignId, bool checkElementNames, string collectionName, string databaseName, int maxBatchCount, int maxBatchLength, int maxDocumentSize, int maxWireDocumentSize, bool isOrdered, BsonBinaryReaderSettings readerSettings, IEnumerable<WriteRequest> requests, WriteConcern writeConcern, BsonBinaryWriterSettings writerSettings) { _assignId = assignId; _checkElementNames = checkElementNames; _collectionName = collectionName; _databaseName = databaseName; _maxBatchCount = maxBatchCount; _maxBatchLength = maxBatchLength; _maxDocumentSize = maxDocumentSize; _maxWireDocumentSize = maxWireDocumentSize; _isOrdered = isOrdered; _readerSettings = readerSettings; _requests = requests; _writeConcern = writeConcern; _writerSettings = writerSettings; }
/// <summary> /// Initializes a new instance of the <see cref="GridFSBucketOptions"/> class. /// </summary> /// <param name="other">The other <see cref="GridFSBucketOptions.Immutable"/> from which to copy the values.</param> public GridFSBucketOptions(GridFSBucketOptions.Immutable other) { _bucketName = other.BucketName; _chunkSizeBytes = other.ChunkSizeBytes; _readPreference = other.ReadPreference; _writeConcern = other.WriteConcern; }
// constructors /// <summary> /// Creates a new instance of MongoServerSettings. Usually you would use a connection string instead. /// </summary> public MongoServerSettings() { _connectionMode = ConnectionMode.Automatic; _connectTimeout = MongoDefaults.ConnectTimeout; _credentialsStore = new MongoCredentialsStore(); _defaultCredentials = null; _guidRepresentation = MongoDefaults.GuidRepresentation; _ipv6 = false; _maxConnectionIdleTime = MongoDefaults.MaxConnectionIdleTime; _maxConnectionLifeTime = MongoDefaults.MaxConnectionLifeTime; _maxConnectionPoolSize = MongoDefaults.MaxConnectionPoolSize; _minConnectionPoolSize = MongoDefaults.MinConnectionPoolSize; _readPreference = ReadPreference.Primary; _replicaSetName = null; _secondaryAcceptableLatency = MongoDefaults.SecondaryAcceptableLatency; _servers = new List<MongoServerAddress> { new MongoServerAddress("localhost") }; _socketTimeout = MongoDefaults.SocketTimeout; _useSsl = false; _verifySslCertificate = true; _waitQueueSize = MongoDefaults.ComputedWaitQueueSize; _waitQueueTimeout = MongoDefaults.WaitQueueTimeout; #pragma warning disable 612, 618 _writeConcern = MongoDefaults.SafeMode.WriteConcern; #pragma warning restore }
// constructors protected BulkWriteOperationArgs( string collectionName, string databaseName, int maxBatchCount, int maxBatchLength, int maxDocumentSize, int maxWireDocumentSize, bool isOrdered, BsonBinaryReaderSettings readerSettings, IEnumerable<WriteRequest> requests, WriteConcern writeConcern, BsonBinaryWriterSettings writerSettings) { _collectionName = collectionName; _databaseName = databaseName; _maxBatchCount = maxBatchCount; _maxBatchLength = maxBatchLength; _maxDocumentSize = maxDocumentSize; _maxWireDocumentSize = maxWireDocumentSize; _isOrdered = isOrdered; _readerSettings = readerSettings; _requests = requests; _writeConcern = writeConcern; _writerSettings = writerSettings; }
public void CreateOperation_should_return_expected_result( [Values(false, true)] bool isCommandSupported) { var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) }; var writeConcern = new WriteConcern(1); var subject = new CreateIndexesOperation(_collectionNamespace, requests, _messageEncoderSettings) { WriteConcern = writeConcern }; var serverVersion = Feature.CreateIndexesCommand.SupportedOrNotSupportedVersion(isCommandSupported); var result = subject.CreateOperation(serverVersion); if (isCommandSupported) { result.Should().BeOfType<CreateIndexesUsingCommandOperation>(); var operation = (CreateIndexesUsingCommandOperation)result; operation.CollectionNamespace.Should().BeSameAs(_collectionNamespace); operation.MessageEncoderSettings.Should().BeSameAs(_messageEncoderSettings); operation.Requests.Should().Equal(requests); operation.WriteConcern.Should().BeSameAs(writeConcern); } else { result.Should().BeOfType<CreateIndexesUsingInsertOperation>(); var operation = (CreateIndexesUsingInsertOperation)result; operation.CollectionNamespace.Should().BeSameAs(_collectionNamespace); operation.MessageEncoderSettings.Should().BeSameAs(_messageEncoderSettings); operation.Requests.Should().Equal(requests); } }
// constructors public BulkInsertOperationArgs( Action<InsertRequest> assignId, bool checkElementNames, string collectionName, string databaseName, int maxBatchCount, int maxBatchLength, int maxDocumentSize, int maxWireDocumentSize, bool isOrdered, BsonBinaryReaderSettings readerSettings, IEnumerable<InsertRequest> requests, WriteConcern writeConcern, BsonBinaryWriterSettings writerSettings) : base( collectionName, databaseName, maxBatchCount, maxBatchLength, maxDocumentSize, maxWireDocumentSize, isOrdered, readerSettings, requests.Cast<WriteRequest>(), writeConcern, writerSettings) { _assignId = assignId; _checkElementNames = checkElementNames; }
public Impl(MongoServer connection, WriteConcern writeConcern) { _writeConcern = writeConcern; new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray().Take(4).ToArray(), 0)).NextBytes(_initialValue); _collection = connection.GetDatabase(typeof (SomeDocument).Name).GetCollection<SomeDocument>(typeof (SomeDocument).Name); }
public void Constructor_with_string_argument_should_properly_initialize_instance() { var writeConcern = new WriteConcern("mode"); writeConcern.FSync.Should().NotHaveValue(); writeConcern.Journal.Should().NotHaveValue(); writeConcern.W.Should().Be((WriteConcern.WValue)"mode"); writeConcern.WTimeout.Should().NotHaveValue(); }
public void Constructor_with_no_arguments_should_properly_initialize_instance() { var writeConcern = new WriteConcern(); writeConcern.FSync.Should().NotHaveValue(); writeConcern.Journal.Should().NotHaveValue(); writeConcern.W.Should().BeNull(); writeConcern.WTimeout.Should().NotHaveValue(); }
/// <summary> /// Initializes a new instance of the <see cref="GridFSBucketOptions"/> class. /// </summary> /// <param name="other">The other <see cref="ImmutableGridFSBucketOptions"/> from which to copy the values.</param> public GridFSBucketOptions(ImmutableGridFSBucketOptions other) { Ensure.IsNotNull(other, nameof(other)); _bucketName = other.BucketName; _chunkSizeBytes = other.ChunkSizeBytes; _readConcern = other.ReadConcern; _readPreference = other.ReadPreference; _writeConcern = other.WriteConcern; }
public void Constructor_with_four_arguments_should_properly_initialize_instance(int? w, int? wTimeoutSeconds, bool? fsync, bool? journal) { var wCount = w.HasValue ? (WriteConcern.WValue)w.Value : null; var wTimeout = wTimeoutSeconds.HasValue ? (TimeSpan?)TimeSpan.FromSeconds(wTimeoutSeconds.Value) : null; var writeConcern = new WriteConcern(wCount, wTimeout, fsync, journal); writeConcern.W.Should().Be(wCount); writeConcern.WTimeout.Should().Be(wTimeout); writeConcern.FSync.Should().Be(fsync); writeConcern.Journal.Should().Be(journal); }
protected WriteOpcodeOperationBase( string databaseName, string collectionName, BsonBinaryReaderSettings readerSettings, BsonBinaryWriterSettings writerSettings, WriteConcern writeConcern) : base(databaseName, collectionName, readerSettings, writerSettings) { _writeConcern = writeConcern; }
public override WriteConcernResult Save(BsonDocument document, WriteConcern writeConcern, bool needResult) { // copy, make id, override document = CloneExternalDocument(document); var id = document.EnsureId(); bool updatedExisting = _data.ContainsKey(id); _data[id] = document; return needResult ? new WriteConcernResult(NewResponse(1, updatedExisting, null, null)) : null; }
public void constructor_with_journal_should_initialize_instance( [Values(false, true, null)] bool? journal) { var result = new WriteConcern(journal: journal); result.FSync.Should().NotHaveValue(); result.Journal.Should().Be(journal); result.W.Should().BeNull(); result.WTimeout.Should().NotHaveValue(); }
// constructors public DeleteWireProtocol( CollectionNamespace collectionNamespace, BsonDocument query, bool isMulti, MessageEncoderSettings messageEncoderSettings, WriteConcern writeConcern) : base(collectionNamespace, messageEncoderSettings, writeConcern) { _query = Ensure.IsNotNull(query, "query"); _isMulti = isMulti; }
public void Setup() { Db.GetCollection<ParentEntity>().Drop(); Db.GetCollection<Entity>().Drop(); Db.EnsureIndexes(); _writeConcern = new WriteConcern { W = WriteConcern.Acknowledged.W, Journal = true }; }
// constructors public DeleteWireProtocol( string databaseName, string collectionName, WriteConcern writeConcern, BsonDocument query, bool isMulti) : base(databaseName, collectionName, writeConcern) { _query = Ensure.IsNotNull(query, "query"); _isMulti = isMulti; }
protected WriteConcernResult SendMessageWithWriteConcern( MongoConnection connection, BsonBuffer buffer, int requestId, BsonBinaryReaderSettings readerSettings, BsonBinaryWriterSettings writerSettings, WriteConcern writeConcern) { CommandDocument getLastErrorCommand = null; if (writeConcern.Enabled) { var fsync = (writeConcern.FSync == null) ? null : (BsonValue)writeConcern.FSync; var journal = (writeConcern.Journal == null) ? null : (BsonValue)writeConcern.Journal; var w = (writeConcern.W == null) ? null : writeConcern.W.ToGetLastErrorWValue(); var wTimeout = (writeConcern.WTimeout == null) ? null : (BsonValue)(int)writeConcern.WTimeout.Value.TotalMilliseconds; getLastErrorCommand = new CommandDocument { { "getlasterror", 1 }, // use all lowercase for backward compatibility { "fsync", fsync, fsync != null }, { "j", journal, journal != null }, { "w", w, w != null }, { "wtimeout", wTimeout, wTimeout != null } }; // piggy back on network transmission for message var getLastErrorMessage = new MongoQueryMessage(writerSettings, DatabaseName + ".$cmd", QueryFlags.None, 0, 1, getLastErrorCommand, null); getLastErrorMessage.WriteToBuffer(buffer); } connection.SendMessage(buffer, requestId); WriteConcernResult writeConcernResult = null; if (writeConcern.Enabled) { var writeConcernResultSerializer = BsonSerializer.LookupSerializer(typeof(WriteConcernResult)); var replyMessage = connection.ReceiveMessage<WriteConcernResult>(readerSettings, writeConcernResultSerializer, null); if (replyMessage.NumberReturned == 0) { throw new MongoCommandException("Command 'getLastError' failed. No response returned"); } writeConcernResult = replyMessage.Documents[0]; writeConcernResult.Command = getLastErrorCommand; var mappedException = ExceptionMapper.Map(writeConcernResult); if (mappedException != null) { throw mappedException; } } return writeConcernResult; }
public RemoveOperation( string databaseName, string collectionName, BsonBinaryReaderSettings readerSettings, BsonBinaryWriterSettings writerSettings, WriteConcern writeConcern, IMongoQuery query, RemoveFlags flags) : base(databaseName, collectionName, readerSettings, writerSettings, writeConcern) { _query = query; _flags = flags; }
public void constructor_with_mode_and_fsync_should_initialize_instance( [Values("abc", "def")] string mode, [Values(false, true, null)] bool? fsync) { var result = new WriteConcern(mode, fsync: fsync); result.FSync.Should().Be(fsync); result.Journal.Should().NotHaveValue(); result.W.Should().Be(new WriteConcern.WMode(mode)); result.WTimeout.Should().NotHaveValue(); }
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { WriteConcern writeConcern; if (value is string) { switch (((string)value).ToUpper()) { case "ACKNOWLEDGED": writeConcern = WriteConcern.Acknowledged; break; case "NONE": case "UNACKNOWLEDGED": writeConcern = WriteConcern.Unacknowledged; break; case "JOURNALED": writeConcern = new WriteConcern { W = 0, Journal = true }; break; case "FSYNCED": writeConcern = new WriteConcern { W = 0, FSync = true }; break; case "WMAJORITY": writeConcern = WriteConcern.WMajority; break; case "NORMAL": writeConcern = new WriteConcern { W = 0 }; break; case "W2": writeConcern = WriteConcern.W2; break; case "W3": writeConcern = WriteConcern.W3; break; case "W4": writeConcern = WriteConcern.W4; break; default: throw new InvalidOperationException(string.Format("'{0}' is not a supported WriteConcern mode.", value)); } } else if (value is bool) { writeConcern = ((bool)value) ? WriteConcern.Acknowledged : WriteConcern.Unacknowledged; } else { throw new InvalidOperationException(string.Format("Object value must be string or bool but is {0}", value.GetType().Name)); } return writeConcern; }
public void CreateCollection_should_execute_the_CreateCollectionOperation_when_options_is_generic( [Values(false, true)] bool async) { var storageEngine = new BsonDocument("awesome", true); var options = new CreateCollectionOptions<BsonDocument> { AutoIndexId = false, Capped = true, Collation = new Collation("en_US"), IndexOptionDefaults = new IndexOptionDefaults { StorageEngine = new BsonDocument("x", 1) }, MaxDocuments = 10, MaxSize = 11, StorageEngine = storageEngine, UsePowerOf2Sizes = false, ValidationAction = DocumentValidationAction.Warn, ValidationLevel = DocumentValidationLevel.Off, Validator = new BsonDocument("x", 1) }; var writeConcern = new WriteConcern(1); var subject = _subject.WithWriteConcern(writeConcern); if (async) { subject.CreateCollectionAsync("bar", options, CancellationToken.None).GetAwaiter().GetResult(); } else { subject.CreateCollection("bar", options, CancellationToken.None); } var call = _operationExecutor.GetWriteCall<BsonDocument>(); call.Operation.Should().BeOfType<CreateCollectionOperation>(); var op = (CreateCollectionOperation)call.Operation; op.CollectionNamespace.Should().Be(new CollectionNamespace(new DatabaseNamespace("foo"), "bar")); op.AutoIndexId.Should().Be(options.AutoIndexId); op.Capped.Should().Be(options.Capped); op.Collation.Should().BeSameAs(options.Collation); op.IndexOptionDefaults.ToBsonDocument().Should().Be(options.IndexOptionDefaults.ToBsonDocument()); op.MaxDocuments.Should().Be(options.MaxDocuments); op.MaxSize.Should().Be(options.MaxSize); op.StorageEngine.Should().Be(storageEngine); op.UsePowerOf2Sizes.Should().Be(options.UsePowerOf2Sizes); op.ValidationAction.Should().Be(options.ValidationAction); op.ValidationLevel.Should().Be(options.ValidationLevel); var serializerRegistry = options.SerializerRegistry ?? BsonSerializer.SerializerRegistry; var documentSerializer = options.DocumentSerializer ?? serializerRegistry.GetSerializer<BsonDocument>(); var renderedValidator = options.Validator.Render(documentSerializer, serializerRegistry); op.Validator.Should().Be(renderedValidator); op.WriteConcern.Should().BeSameAs(writeConcern); }
// constructors public UpdateWireProtocol( string databaseName, string collectionName, WriteConcern writeConcern, BsonDocument query, BsonDocument update, bool isMulti, bool isUpsert) : base(databaseName, collectionName, writeConcern) { _query = Ensure.IsNotNull(query, "query"); _update = Ensure.IsNotNull(update, "update"); _isMulti = isMulti; _isUpsert = isUpsert; }
protected override bool TrySetArgument(string name, BsonValue value) { switch (name) { case "requests": _requests = ParseRequests((BsonArray)value).ToList(); return true; case "ordered": _options.IsOrdered = value.ToBoolean(); return true; case "writeConcern": _writeConcern = WriteConcern.FromBsonDocument((BsonDocument)value); return true; } return false; }
// constructors public UpdateWireProtocol( CollectionNamespace collectionNamespace, MessageEncoderSettings messageEncoderSettings, WriteConcern writeConcern, BsonDocument query, BsonDocument update, IElementNameValidator updateValidator, bool isMulti, bool isUpsert) : base(collectionNamespace, messageEncoderSettings, writeConcern) { _updateValidator = Ensure.IsNotNull(updateValidator, nameof(updateValidator)); _query = Ensure.IsNotNull(query, nameof(query)); _update = Ensure.IsNotNull(update, nameof(update)); _isMulti = isMulti; _isUpsert = isUpsert; }
protected override bool TrySetArgument(string name, BsonValue value) { switch (name) { case "documents": _documents = ((BsonArray)value).OfType<BsonDocument>(); return true; case "ordered": _options.IsOrdered = value.ToBoolean(); return true; case "writeConcern": _writeConcern = WriteConcern.FromBsonDocument((BsonDocument)value); return true; } return false; }
public static WriteConcernResult ModifyAll <TEntity>(this IRepository commandRepository, ISpecificationQueryStrategy <TEntity> specificationStrategy, WriteConcern writeConcern, IMongoUpdate mongoUpdate) where TEntity : class { return(_DefaultImplementation.ModifyAll <TEntity>(commandRepository, specificationStrategy, writeConcern, mongoUpdate)); }
public override IMongoCollection <TDerivedDocument> WithWriteConcern(WriteConcern writeConcern) { return(new OfTypeMongoCollection <TRootDocument, TDerivedDocument>(_rootDocumentCollection, WrappedCollection.WithWriteConcern(writeConcern), Filter)); }
private IClientSessionHandle CreateSession(BsonDocument entity, Dictionary <string, DisposableMongoClient> clients) { IMongoClient client = null; ClientSessionOptions options = null; foreach (var element in entity) { switch (element.Name) { case "id": // handled on higher level break; case "client": var clientId = element.Value.AsString; client = clients[clientId]; break; case "sessionOptions": options = new ClientSessionOptions(); foreach (var option in element.Value.AsBsonDocument) { switch (option.Name) { case "causalConsistency": options.CausalConsistency = option.Value.ToBoolean(); break; case "defaultTransactionOptions": ReadConcern readConcern = null; ReadPreference readPreference = null; WriteConcern writeConcern = null; foreach (var transactionOption in option.Value.AsBsonDocument) { switch (transactionOption.Name) { case "readConcern": readConcern = ReadConcern.FromBsonDocument(transactionOption.Value.AsBsonDocument); break; case "readPreference": readPreference = ReadPreference.FromBsonDocument(transactionOption.Value.AsBsonDocument); break; case "writeConcern": writeConcern = WriteConcern.FromBsonDocument(transactionOption.Value.AsBsonDocument); break; default: throw new FormatException($"Invalid session transaction option: '{transactionOption.Name}'."); } } options.DefaultTransactionOptions = new TransactionOptions(readConcern, readPreference, writeConcern); break; default: throw new FormatException($"Unrecognized session option: '{option.Name}'."); } } break; default: throw new FormatException($"Unrecognized database entity field: '{element.Name}'."); } } var session = client.StartSession(options); return(session); }
public IMongoClient WithWriteConcern(WriteConcern writeConcern) { return(this); }
/// <inheritdoc/> public IMongoDatabase WithWriteConcern(WriteConcern writeConcern) { return(_configuration.Database.WithWriteConcern(writeConcern)); }
public static void CRUD() { var exp = ExpressionMapper.MapExp <StudentVm, Student>(); #region 连接Mongodb var client = new MongoClient("mongodb://localhost:27017"); var database = client.GetDatabase("school"); #endregion #region 约束 驼峰命名法 var pack = new ConventionPack(); pack.Add(new CamelCaseElementNameConvention()); ConventionRegistry.Register("CamelCaseElementNameConvention", pack, t => true); #endregion #region 1.插入数据 var collection = database.GetCollection <Student>("student"); if (collection.CountDocuments(a => true) == 0) { collection.InsertOne(new Student() { Age = 27, Name = "zhangsan", Address = "河南", Birthday = DateTime.Parse("1992-06-17 12:35:12"), Hobbies = new[] { "阅读", "跑步", }, Courses = new List <Course>() { new Course() { Name = "计算机理论", Count = 30 }, new Course() { Name = "操作系统", Count = 35 } } }); collection.InsertOne(new Student() { Age = 23, Name = "lisi", Address = "北京", Birthday = DateTime.Parse("1996-05-17 14:40:08"), Hobbies = new[] { "游戏", "睡觉", "代码" }, Courses = new List <Course>() { new Course() { Name = "c#语言基础", Count = 30 }, new Course() { Name = "编译原理", Count = 35 } } }); var bulkList = new List <Student>() { new Student() { Age = 26, Name = "wangwu", Address = "河北", Birthday = DateTime.Parse("1993-08-17 16:40:08"), Hobbies = new[] { "睡觉" }, Courses = new List <Course>() { new Course() { Name = "网络编程", Count = 30 }, new Course() { Name = "操作系统", Count = 35 } } }, new Student() { Age = 29, Name = "wangwu", Address = "南京", Birthday = DateTime.Parse("1990-05-17 14:40:08"), Hobbies = new[] { "游戏", "睡觉", "代码", "逛街" }, Courses = new List <Course>() { new Course() { Name = "网络编程", Count = 30 }, new Course() { Name = "操作系统", Count = 35 } } } }; collection.InsertMany(bulkList); } #endregion Console.WriteLine(); #region 2.过滤器(Filter) Console.WriteLine("==============过滤=============="); //空过滤器匹配全部 FilterDefinition <BsonDocument> filter0 = Builders <BsonDocument> .Filter.Empty; //一般匹配 FilterDefinition <BsonDocument> filter1 = "{name:'zhangsan'}"; FilterDefinition <BsonDocument> filter2 = new BsonDocument("name", "zhangsan"); var builder3 = Builders <BsonDocument> .Filter; var filter3 = builder3.Eq("name", "zhangsan") & builder3.Gt("age", 10); var builder4 = Builders <Student> .Filter; var filter4 = (builder4.Eq("name", "zhangsan") & builder4.Gt(a => a.Age, 10)) | builder4.Gt(a => a.Birthday, DateTime.Parse("1990-01-01")); var query21 = database.GetCollection <BsonDocument>("student").Find(filter1); var json21 = query21.ToString(); var student21 = query21.FirstOrDefault(); Console.WriteLine(json21); var query22 = database.GetCollection <BsonDocument>("student").Find(filter2); var json22 = query22.ToString(); var student22 = query22.FirstOrDefault(); Console.WriteLine(json22); var query23 = database.GetCollection <BsonDocument>("student").Find(filter3); var json23 = query23.ToString(); var student23 = query23.FirstOrDefault(); Console.WriteLine(json23); var query24 = database.GetCollection <Student>("student").Find(filter4); var json24 = query24.ToString(); var student24 = query24.FirstOrDefault(); Console.WriteLine(json24); //数组匹配 var builder5 = Builders <BsonDocument> .Filter; var filter25 = builder5.AnyEq("courses.name", "操作系统"); var query25 = database.GetCollection <BsonDocument>("student").Find(filter25); var json25 = query25.ToString(); var student25 = database.GetCollection <BsonDocument>("student").Find(filter25).ToList(); Console.WriteLine(json25); var builder6 = Builders <Student> .Filter; var filter26 = builder6.ElemMatch(a => a.Courses, a => a.Name == "操作系统"); var query26 = database.GetCollection <Student>("student").Find(filter26); var json26 = query26.ToString(); var student26 = database.GetCollection <Student>("student").Find(filter26).ToList(); Console.WriteLine(json26); var builder7 = Builders <Student> .Filter; var filter27 = builder7.ElemMatch(a => a.Courses, a => a.Name == "操作系统") & builder7.ElemMatch(a => a.Courses, a => a.Count > 30); var query27 = database.GetCollection <Student>("student").Find(filter27); var json27 = query27.ToString(); var student27 = database.GetCollection <Student>("student").Find(filter27).ToList(); Console.WriteLine(json27); var builder8 = Builders <Student> .Filter; var filter28 = builder8.ElemMatch(a => a.Courses, a => a.Name == "操作系统") | builder8.ElemMatch(a => a.Courses, a => a.Count > 30); var query28 = database.GetCollection <Student>("student").Find(filter28); var json28 = query28.ToString(); var student28 = database.GetCollection <Student>("student").Find(filter28).ToList(); Console.WriteLine(json28); var builder9 = Builders <Student> .Filter; var filter29 = builder9.SizeGte(a => a.Hobbies, 4); var query29 = database.GetCollection <Student>("student").Find(filter29); var json29 = query29.ToString(); var student29 = database.GetCollection <Student>("student").Find(filter29).ToList(); Console.WriteLine(json29); var builder10 = Builders <Student> .Filter; var filter210 = builder10.In(a => a.Name, new[] { "zhangsan", "wangwu" }); var query210 = database.GetCollection <Student>("student").Find(filter210); var json210 = query210.ToString(); var student210 = database.GetCollection <Student>("student").Find(filter210).ToList(); Console.WriteLine(json210); var builder11 = Builders <Student> .Filter; var filter211 = builder11.AnyEq(a => a.Hobbies, "睡觉"); var query211 = database.GetCollection <Student>("student").Find(filter211); var json211 = query211.ToString(); var student211 = database.GetCollection <Student>("student").Find(filter211).ToList(); Console.WriteLine(json211); var builder12 = Builders <Student> .Filter; var filter212 = builder12.Regex(a => a.Name, "ng"); var query212 = database.GetCollection <Student>("student").Find(filter212); var json212 = query212.ToString(); var student212 = database.GetCollection <Student>("student").Find(filter212).ToList(); Console.WriteLine(json212); var indexes = database.GetCollection <Student>("student").Indexes; var indexKey = Builders <Student> .IndexKeys.Text(a => a.Name); var model = new CreateIndexModel <Student>(indexKey); indexes.CreateOne(model); var list = indexes.List().ToList(); var builder13 = Builders <Student> .Filter; var filter213 = builder13.Text("zhangsan"); var query213 = database.GetCollection <Student>("student").Find(filter213); var json213 = query213.ToString(); var student213 = database.GetCollection <Student>("student").Find(filter213).ToList(); Console.WriteLine(json213); Console.WriteLine("==============过滤=============="); #endregion Console.WriteLine(); #region 3.投影(Projections) Console.WriteLine("==============投影=============="); ProjectionDefinition <BsonDocument> projection1 = "{age:1}"; ProjectionDefinition <BsonDocument> projection2 = new BsonDocument("age", 1); var json31 = projection1.RenderToBsonDocument(); var students31 = database.GetCollection <BsonDocument>("student").Find(a => true).Project(projection1).ToList(); Console.WriteLine(json31); var projection3 = Builders <Student> .Projection.Include(a => a.Age).Include(a => a.Name); var projection4 = Builders <Student> .Projection.Exclude(a => a.Id).Exclude(a => a.Courses); var projection5 = Builders <Student> .Projection.Exclude(a => a.Id); var query33 = database.GetCollection <Student>("student").Find(a => true).Project <Student>(projection3); var json33 = query33.ToString(); var students33 = query33.ToList(); Console.WriteLine(json33); var query34 = database.GetCollection <Student>("student").Find(a => true).Project <Student>(projection4); var json34 = query34.ToString(); var students34 = query34.ToList(); Console.WriteLine(json34); var query35 = database.GetCollection <Student>("student").Find(a => true).Project <Student>(projection5); var json35 = query35.ToString(); var students35 = query35.ToList(); Console.WriteLine(json35); var projection6 = Builders <Student> .Projection.Expression(a => new StudentVm() { Age = a.Age, Id = a.Id, Name = a.Name }); var query36 = database.GetCollection <Student>("student").Find(a => true).Project(projection6); var json36 = query36.ToString(); var students36 = query36.ToList(); Console.WriteLine(json36); var students37 = database.GetCollection <Student>("student").Find(a => true).Project(a => new StudentVm { Age = a.Age, Id = a.Id, Name = a.Name }).ToList(); var query38 = database.GetCollection <Student>("student").Find(a => true).Project(a => new { a.Age, a.Id, a.Name }); var json38 = query38.ToString(); var students38 = query38.ToList(); Console.WriteLine(json38); var query39 = database.GetCollection <Student>("student").Find(a => true).Project(a => new { AgeAndName = a.Name + "," + a.Age.ToString() }); var json39 = query39.ToString(); var students39 = query39.ToList(); Console.WriteLine(json39); //自动投影 根据StudentVm中的属性自动生成 var query310 = database.GetCollection <Student>("student").Find(a => true).Project(ExpressionMapper.MapExp <Student, StudentVm>()); var json310 = query310.ToString(); var listss = query310.ToList(); Console.WriteLine($"自动投影:{json310}"); Console.WriteLine("==============投影=============="); #endregion Console.WriteLine(); #region 4.排序(Sort) Console.WriteLine("==============排序=============="); SortDefinition <BsonDocument> sort1 = "{ age: 1 }"; SortDefinition <BsonDocument> sort2 = Builders <BsonDocument> .Sort.Ascending("_id").Descending("age"); SortDefinition <Student> sort3 = Builders <Student> .Sort.Ascending(a => a.Id).Descending(a => a.Age); var query41 = database.GetCollection <Student>("student").Find(new BsonDocument()).Sort(sort3); var json41 = query41.ToString(); var student41 = query41.ToList(); Console.WriteLine(json41); Console.WriteLine("==============排序=============="); #endregion Console.WriteLine(); #region 5.更新(Update) Console.WriteLine("==============更新=============="); UpdateDefinition <BsonDocument> update1 = "{ $set: { age: 25 } }"; UpdateDefinition <BsonDocument> update2 = new BsonDocument("$set", new BsonDocument("age", 1)); //数组更新添加 var updateBuilder = Builders <Student> .Update; UpdateDefinition <Student> update3 = updateBuilder .Set(a => a.Name, "修改名称") .Set(a => a.Age, 25) .Push(a => a.Hobbies, "购物") .PushEach(a => a.Courses, new List <Course>() { new Course() { Name = "马克思主义理论基础", Count = 10, }, new Course() { Name = "毛泽东思想概论", Count = 10, } }) .CurrentDate(a => a.Birthday, UpdateDefinitionCurrentDateType.Date); var json53 = update3.RenderToBsonDocument(); var student53 = collection.UpdateOne(a => a.Name == "zhangsan", update3); Console.WriteLine(json53); //数组更新移除 UpdateDefinition <Student> update4 = updateBuilder .Set(a => a.Name, "zhangsan") .Inc(a => a.Age, 100) .Pull(a => a.Hobbies, "购物") .PullFilter(a => a.Courses, a => a.Name == "毛泽东思想概论"); var json54 = update4.RenderToBsonDocument(); var student54 = collection.UpdateOne(a => a.Name == "修改名称", update4); Console.WriteLine(json54); //匹配数组中得某个元素,并更新这个元素的相关字段 UpdateDefinition <Student> update5 = updateBuilder .Set(a => a.Courses[-1].Name, "ssss"); var json55 = update5.RenderToBsonDocument(); var student55 = collection.UpdateOne(a => a.Courses.Any(b => b.Name == "马克思主义理论基础"), update5); Console.WriteLine(json55); UpdateDefinition <Student> update6 = updateBuilder .Mul(a => a.Age, 12); var op = new FindOneAndUpdateOptions <Student>() { IsUpsert = true, ReturnDocument = ReturnDocument.After }; var student56 = collection.FindOneAndUpdate <Student>(a => a.Age > 26, update6, op); var update7 = updateBuilder .PopFirst(a => a.Hobbies) .PopLast(a => a.Courses); var json57 = update7.RenderToBsonDocument(); var student57 = collection.UpdateOne(a => a.Name == "zhangsan", update7); Console.WriteLine(json57); var update8 = updateBuilder .SetOnInsert(a => a.Name, "ssss"); var json58 = update8.RenderToBsonDocument(); var student58 = collection.UpdateOne(a => a.Name == "ls", update8, new UpdateOptions() { IsUpsert = true }); Console.WriteLine(json58); var update9 = updateBuilder .Rename(a => a.Address, "homeAddress"); var json59 = update9.RenderToBsonDocument(); var student59 = collection.UpdateOne(a => a.Name == "wangwu", update9); Console.WriteLine(json59); var update10 = updateBuilder .Set(a => a.Name, "**"); var json510 = update10.RenderToBsonDocument(); var student510 = collection.UpdateMany(a => a.Age > 20, update10); Console.WriteLine(json510); //根据条件动态更新 var update11 = updateBuilder .Set(a => a.Name, "**"); if (true) { update11 = update11.Set(a => a.Age, 12); } var json511 = update11.RenderToBsonDocument(); Console.WriteLine(json511); Console.WriteLine("==============更新=============="); #endregion Console.WriteLine(); #region 6.聚合(Aggregation) Console.WriteLine("==============聚合=============="); var pipeline1 = new BsonDocument[] { new BsonDocument { { "$sort", new BsonDocument("_id", 1) } }, new BsonDocument { { "$group", new BsonDocument { { "_id", "$age" }, { "min", new BsonDocument { { "$min", "$age" } } } } } } }; var student61 = collection.Aggregate <BsonDocument>(pipeline1).ToListAsync(); var agg = collection.Aggregate(); var gg = agg .Match(a => a.Age > 10) .Project(a => new { a.Age, a.Name }) .Group(key => key.Age, g => new { age = g.Key, count = g.Count(), max = g.Max(a => a.Age), min = g.Min(a => a.Age), avg = g.Average(a => a.Age) }); var json62 = gg.ToString(); var student62 = gg.ToList(); Console.WriteLine(json62); Console.WriteLine("==============聚合=============="); #endregion Console.WriteLine(); #region 7.删除数据 var student71 = collection.DeleteOne(a => a.Age > 100); var student72 = collection.DeleteMany(a => a.Age > 100); var op7 = new FindOneAndDeleteOptions <Student>() { }; var student73 = collection.FindOneAndDelete <Student>(a => a.Age > 100, op7); #endregion Console.WriteLine(); #region 8.快速使用 Console.WriteLine("==============快速使用=============="); var student80 = collection.Find(a => true).FirstOrDefault(); var students81 = collection.Find(a => true).ToList(); var students82 = collection.Find(a => true).Skip(80).Limit(20).ToList(); var long83 = collection.Find(a => true).CountDocuments(); var bool84 = collection.Find(a => true).Any(); var students85 = collection.Find(a => true).SortBy(a => a.Id).SortByDescending(a => a.Age).ToList(); var queryable = collection.AsQueryable(); var queryable86 = queryable.Where(a => a.Age > 20).Select(a => new { a.Age, a.Name }) .GroupBy(a => a.Age) .Select(g => new { g.Key, Max = g.Max(a => a.Age), Min = g.Min(a => a.Age), Avg = g.Average(a => a.Age), Name = g.First().Name, Count = g.Count(), }); var json86 = queryable86.ToString(); Console.WriteLine(json86); Console.WriteLine("==============快速使用=============="); #endregion #region 9.执行命令 //批量更新不同的值 var dic = new Dictionary <string, object>() { { "update", "students" }, { "updates", new List <BsonDocument>() } }; //循环生成不同的更新命令 for (int i = 0; i < 10; i++) { ((List <BsonDocument>)dic["updates"]).Add(new BsonDocument() { { "q", new BsonDocument("age", i * 5) }, { "u", new BsonDocument("$set", new BsonDocument() { { "age", i + 2 }, { "name", i + "-" } } ) }, }); } var result = database.RunCommand <BsonDocument>(new BsonDocument(dic)); #endregion //批量操作 #region 10.批量操作 var write = new UpdateOneModel <Student>(filter211, update10); collection.BulkWrite(new List <UpdateOneModel <Student> >() { write }); #endregion #region 11.DbContext封装 var students = SchoolDbContext.Students.Find(a => true); using (var session = SchoolDbContext.MongoClient.StartSession()) { session.StartTransaction(); SchoolDbContext.Students.Find(session, a => true); session.CommitTransaction(); } #endregion #region 12.测试 WriteConcern writeConcern = new WriteConcern(); var update12 = Builders <Student> .Update.Set(a => a.Age, 25); var result12 = database.GetCollection <Student>("student22").UpdateOne(a => a.Name == "ss", update12); #endregion #region 13.聚合2 var p1 = PipelineStageDefinitionBuilder.Match <Student>(a => a.Name == "**"); var student101 = collection.Aggregate().AppendStage(p1).ToList(); #endregion #region 13.连接 //参看:https://stackoverflow.com/questions/50530363/aggregate-lookup-with-c-sharp Console.WriteLine("==============连接查询=============="); var studentQuery = database.GetCollection <Student>("student").AsQueryable(); var classroomQuery = database.GetCollection <ClassRoom>("classroom").AsQueryable(); //使用集合的方式来解决左连接 var student102 = from s in studentQuery.Where(a => a.Name == "**") join c in classroomQuery on s.classroomid equals c.Id into joined select new { s.Name, s.Age, classname = joined }; var query102 = student102.ToString(); Console.WriteLine(query102); var result102 = student102.ToList(); //database.GetCollection<Student>("student").Aggregate() // .Lookup().ToList(); #endregion #region 14 动态生成根据id查找 var result141 = collection.FindById("5d8894a114294d2acc82ecd6").Result; #endregion }
private (DisposableMongoClient Client, Dictionary <string, EventCapturer> ClientEventCapturers) CreateClient(BsonDocument entity) { var clientEventCapturers = new Dictionary <string, EventCapturer>(); string clientId = null; var commandNamesToSkipInEvents = new List <string>(); List <(string Key, IEnumerable <string> Events, List <string> CommandNotToCapture)> eventTypesToCapture = new (); var readConcern = ReadConcern.Default; var retryReads = true; var retryWrites = true; var useMultipleShardRouters = false; var writeConcern = WriteConcern.Acknowledged; ServerApi serverApi = null; foreach (var element in entity) { switch (element.Name) { case "id": clientId = element.Value.AsString; break; case "uriOptions": foreach (var option in element.Value.AsBsonDocument) { switch (option.Name) { case "retryWrites": retryWrites = option.Value.AsBoolean; break; case "retryReads": retryReads = option.Value.AsBoolean; break; case "readConcernLevel": var levelValue = option.Value.AsString; var level = (ReadConcernLevel)Enum.Parse(typeof(ReadConcernLevel), levelValue, true); readConcern = new ReadConcern(level); break; case "w": writeConcern = new WriteConcern(option.Value.AsInt32); break; default: throw new FormatException($"Unrecognized client uriOption name: '{option.Name}'."); } } break; case "useMultipleMongoses": useMultipleShardRouters = element.Value.AsBoolean; break; case "observeEvents": var observeEvents = element.Value.AsBsonArray.Select(x => x.AsString); eventTypesToCapture.Add( (Key: Ensure.IsNotNull(clientId, nameof(clientId)), Events: observeEvents, CommandNotToCapture: commandNamesToSkipInEvents)); break; case "ignoreCommandMonitoringEvents": commandNamesToSkipInEvents.AddRange(element.Value.AsBsonArray.Select(x => x.AsString)); break; case "serverApi": ServerApiVersion serverApiVersion = null; bool? serverApiStrict = null; bool? serverApiDeprecationErrors = null; foreach (var option in element.Value.AsBsonDocument) { switch (option.Name) { case "version": var serverApiVersionString = option.Value.AsString; switch (serverApiVersionString) { case "1": serverApiVersion = ServerApiVersion.V1; break; default: throw new FormatException($"Unrecognized serverApi version: '{serverApiVersionString}'."); } break; case "strict": serverApiStrict = option.Value.AsBoolean; break; case "deprecationErrors": serverApiDeprecationErrors = option.Value.AsBoolean; break; default: throw new FormatException($"Unrecognized client serverApi option name: '{option.Name}'."); } } if (serverApiVersion != null) { serverApi = new ServerApi(serverApiVersion, serverApiStrict, serverApiDeprecationErrors); } break; case "storeEventsAsEntities": var eventsBatches = element.Value.AsBsonArray; foreach (var batch in eventsBatches.Cast <BsonDocument>()) { var id = batch["id"].AsString; var events = batch["events"].AsBsonArray.Select(e => e.AsString); eventTypesToCapture.Add((id, events, CommandNotToCapture: null)); } break; default: throw new FormatException($"Unrecognized client entity field: '{element.Name}'."); } } if (eventTypesToCapture.Count > 0) { var defaultCommandNamesToSkip = new List <string> { "authenticate", "buildInfo", "configureFailPoint", "getLastError", "getnonce", "isMaster", "saslContinue", "saslStart" }; foreach (var eventsDetails in eventTypesToCapture) { var commandNamesNotToCapture = Enumerable.Concat(eventsDetails.CommandNotToCapture ?? Enumerable.Empty <string>(), defaultCommandNamesToSkip); var formatter = _eventFormatters.ContainsKey(eventsDetails.Key) ? _eventFormatters[eventsDetails.Key] : null; var eventCapturer = CreateEventCapturer(eventsDetails.Events, commandNamesNotToCapture, formatter); clientEventCapturers.Add(eventsDetails.Key, eventCapturer); } } var eventCapturers = clientEventCapturers.Select(c => c.Value).ToArray(); var client = DriverTestConfiguration.CreateDisposableClient( settings => { settings.RetryReads = retryReads; settings.RetryWrites = retryWrites; settings.ReadConcern = readConcern; settings.WriteConcern = writeConcern; settings.HeartbeatInterval = TimeSpan.FromMilliseconds(5); // the default value for spec tests settings.ServerApi = serverApi; if (eventCapturers.Length > 0) { settings.ClusterConfigurator = c => { foreach (var eventCapturer in eventCapturers) { c.Subscribe(eventCapturer); } }; } }, useMultipleShardRouters); return(client, clientEventCapturers); }
private Type0CommandMessageSection <BsonDocument> CreateType0Section(ConnectionDescription connectionDescription) { var extraElements = new List <BsonElement>(); AddIfNotAlreadyAdded("$db", _databaseNamespace.DatabaseName); if (connectionDescription?.IsMasterResult.ServerType != ServerType.Standalone && _readPreference != null && _readPreference != ReadPreference.Primary) { var readPreferenceDocument = QueryHelper.CreateReadPreferenceDocument(_readPreference); AddIfNotAlreadyAdded("$readPreference", readPreferenceDocument); } if (_session.Id != null) { if (IsSessionAcknowledged()) { AddIfNotAlreadyAdded("lsid", _session.Id); } else { if (_session.IsImplicit) { // do not set sessionId if session is implicit and write is unacknowledged } else { throw new InvalidOperationException("Explicit session must not be used with unacknowledged writes."); } } } var snapshotReadConcernDocument = ReadConcernHelper.GetReadConcernForSnapshotSesssion(_session, connectionDescription); if (snapshotReadConcernDocument != null) { extraElements.Add(new BsonElement("readConcern", snapshotReadConcernDocument)); } if (_session.ClusterTime != null) { AddIfNotAlreadyAdded("$clusterTime", _session.ClusterTime); } #pragma warning disable 618 Action <BsonWriterSettings> writerSettingsConfigurator = null; if (BsonDefaults.GuidRepresentationMode == GuidRepresentationMode.V2) { writerSettingsConfigurator = s => s.GuidRepresentation = GuidRepresentation.Unspecified; } #pragma warning restore 618 _session.AboutToSendCommand(); if (_session.IsInTransaction) { var transaction = _session.CurrentTransaction; AddIfNotAlreadyAdded("txnNumber", transaction.TransactionNumber); if (transaction.State == CoreTransactionState.Starting) { AddIfNotAlreadyAdded("startTransaction", true); var readConcern = ReadConcernHelper.GetReadConcernForFirstCommandInTransaction(_session, connectionDescription); if (readConcern != null) { AddIfNotAlreadyAdded("readConcern", readConcern); } } AddIfNotAlreadyAdded("autocommit", false); } if (_serverApi != null) { AddIfNotAlreadyAdded("apiVersion", _serverApi.Version.ToString()); if (_serverApi.Strict.HasValue) { AddIfNotAlreadyAdded("apiStrict", _serverApi.Strict.Value); } if (_serverApi.DeprecationErrors.HasValue) { AddIfNotAlreadyAdded("apiDeprecationErrors", _serverApi.DeprecationErrors.Value); } } var elementAppendingSerializer = new ElementAppendingSerializer <BsonDocument>(BsonDocumentSerializer.Instance, extraElements, writerSettingsConfigurator); return(new Type0CommandMessageSection <BsonDocument>(_command, elementAppendingSerializer)); void AddIfNotAlreadyAdded(string key, BsonValue value) { if (!_command.Contains(key)) { extraElements.Add(new BsonElement(key, value)); } } bool IsSessionAcknowledged() { if (_command.TryGetValue("writeConcern", out var writeConcernDocument)) { var writeConcern = WriteConcern.FromBsonDocument(writeConcernDocument.AsBsonDocument); return(writeConcern.IsAcknowledged); } else { return(true); } } }
/// <summary> /// 构造函数 /// </summary> /// <param name="mongoClientSettings">The settings for a MongoDB client.</param> /// <param name="dbName">数据库名称</param> /// <param name="collectionName">集合名称</param> /// <param name="writeConcern"></param> /// <param name="readPreference"></param> /// <param name="sequence">Mongo自增长ID数据序列对象</param> public MongoBaseRepository(MongoClientSettings mongoClientSettings, string dbName, string collectionName = null, WriteConcern writeConcern = null, ReadPreference readPreference = null, MongoSequence sequence = null) : this() { this._sequence = sequence ?? new MongoSequence(); this._mongoSession = new MongoSession(mongoClientSettings, dbName, writeConcern: writeConcern, readPreference: readPreference); this.CollectionName = collectionName ?? typeof(TEntity).Name; }
public Task <WriteConcernResult> RemoveAsync <T>(string collectionName, IMongoQuery query, RemoveFlags removeFlags, WriteConcern writeConcern) { return(_asyncUpdater.RemoveAsync <T>(collectionName, query, removeFlags, writeConcern)); }
public WriteConcernResult Remove <T>(string collectionName, IMongoQuery query, RemoveFlags removeFlags, WriteConcern writeConcern) { return(_updater.Remove <T>(collectionName, query, removeFlags, writeConcern)); }
/// <summary> /// Returns true if the write concern value supplied is one that should be sent to the server and the server version supports the commands that write accept write concern feature. /// </summary> /// <param name="serverVersion">The server version.</param> /// <param name="value">The write concern value.</param> /// <returns>Whether the write concern should be sent to the server.</returns> public bool ShouldSendWriteConcern(SemanticVersion serverVersion, WriteConcern value) { return(value != null && !value.IsServerDefault && base.IsSupported(serverVersion)); }
public override IMongoDatabase WithWriteConcern(WriteConcern writeConcern) { throw new NotImplementedException(); }
public IMongoClient WithWriteConcern(WriteConcern writeConcern) => _mongoClient.WithWriteConcern(writeConcern);
public IMongoClient WithWriteConcern(WriteConcern writeConcern) { return(wrapped.WithWriteConcern(writeConcern)); }
public IMongoCollection <TModel> WithWriteConcern(WriteConcern writeConcern) => _collection.WithWriteConcern(writeConcern);
public IMongoClient WithWriteConcern(WriteConcern writeConcern) { throw new NotImplementedException(); }
private bool TryGetWriteConcernFromGLE(Queue <RequestMessage> messageQueue, out int requestId, out WriteConcern writeConcern) { requestId = -1; writeConcern = null; if (messageQueue.Count == 0) { return(false); } var message = messageQueue.Peek(); if (message.MessageType != MongoDBMessageType.Query) { return(false); } var queryMessage = (QueryMessage)message; if (!IsCommand(queryMessage.CollectionNamespace)) { return(false); } var query = queryMessage.Query; var firstElement = query.GetElement(0); if (firstElement.Name != "getLastError") { return(false); } messageQueue.Dequeue(); // consume it so that we don't process it later... requestId = queryMessage.RequestId; writeConcern = WriteConcern.FromBsonDocument(query); return(true); }
public MongoDatabase GetDatabase(string databaseName, WriteConcern writeConcern) { return(_mongoServer.GetDatabase(databaseName, writeConcern)); }
public IMongoDatabase WithWriteConcern(WriteConcern writeConcern) { return(_mongoDatabase.WithWriteConcern(writeConcern)); }
/// <inheritdoc/> public IMongoDatabase WithWriteConcern(WriteConcern writeConcern) { throw new System.NotImplementedException(); }
public static WriteConcernResult DeletewithConcern <TEntity>(this ICommandRepository repository, TEntity entity, WriteConcern writeConcern = null) where TEntity : class { return(_DefaultImplementation.DeletewithConcern(repository, entity, writeConcern)); }
public IMongoCollection <InformationEntry> WithWriteConcern(WriteConcern writeConcern) { throw new System.NotImplementedException(); }
public static WriteConcernResult UpsertWithConcern <TEntity>(this IRepository repository, TEntity entity, WriteConcern writeConcern = null) where TEntity : class { return(_DefaultImplementation.UpsertWithConcern(repository, entity, writeConcern)); }
/// <inheritdoc/> public IMongoCollection <T> WithWriteConcern(WriteConcern writeConcern) { return(_actualCollection.WithWriteConcern(writeConcern)); }
public virtual IMongoClient WithWriteConcern(WriteConcern writeConcern) => throw new NotImplementedException();
public void RemoveAsync <T>(string collectionName, IMongoQuery query, WriteConcern writeConcern) { new Func <string, IMongoQuery, WriteConcern, WriteConcernResult>(_updater.Remove <T>).BeginInvoke(collectionName, query, writeConcern, CallbackwriteConcernResult, null); }
public abstract IMongoClient WithWriteConcern(WriteConcern writeConcern);
protected WriteConcernResult SendMessageWithWriteConcern( MongoConnection connection, BsonBuffer buffer, int requestId, BsonBinaryReaderSettings readerSettings, BsonBinaryWriterSettings writerSettings, WriteConcern writeConcern) { CommandDocument getLastErrorCommand = null; if (writeConcern.Enabled) { var fsync = (writeConcern.FSync == null) ? null : (BsonValue)writeConcern.FSync; var journal = (writeConcern.Journal == null) ? null : (BsonValue)writeConcern.Journal; var w = (writeConcern.W == null) ? null : writeConcern.W.ToGetLastErrorWValue(); var wTimeout = (writeConcern.WTimeout == null) ? null : (BsonValue)(int)writeConcern.WTimeout.Value.TotalMilliseconds; getLastErrorCommand = new CommandDocument { { "getlasterror", 1 }, // use all lowercase for backward compatibility { "fsync", fsync, fsync != null }, { "j", journal, journal != null }, { "w", w, w != null }, { "wtimeout", wTimeout, wTimeout != null } }; // piggy back on network transmission for message var getLastErrorMessage = new MongoQueryMessage(writerSettings, DatabaseName + ".$cmd", QueryFlags.None, 0, 1, getLastErrorCommand, null); getLastErrorMessage.WriteToBuffer(buffer); } connection.SendMessage(buffer, requestId); WriteConcernResult writeConcernResult = null; if (writeConcern.Enabled) { var writeConcernResultSerializer = BsonSerializer.LookupSerializer(typeof(WriteConcernResult)); var replyMessage = connection.ReceiveMessage <WriteConcernResult>(readerSettings, writeConcernResultSerializer, null); if (replyMessage.NumberReturned == 0) { throw new MongoCommandException("Command 'getLastError' failed. No response returned"); } writeConcernResult = replyMessage.Documents[0]; writeConcernResult.Command = getLastErrorCommand; if (!writeConcernResult.Ok) { var errorMessage = string.Format( "WriteConcern detected an error '{0}'. (response was {1}).", writeConcernResult.ErrorMessage, writeConcernResult.Response.ToJson()); throw new WriteConcernException(errorMessage, writeConcernResult); } if (writeConcernResult.HasLastErrorMessage) { var errorMessage = string.Format( "WriteConcern detected an error '{0}'. (Response was {1}).", writeConcernResult.LastErrorMessage, writeConcernResult.Response.ToJson()); throw new WriteConcernException(errorMessage, writeConcernResult); } } return(writeConcernResult); }
protected virtual void SetWriteConcern(WriteConcern value) { _database = _database.WithWriteConcern(value); }
protected override bool TrySetArgument(string name, BsonValue value) { switch (name) { case "document": _document = (BsonDocument)value; return true; case "writeConcern": _writeConcern = WriteConcern.FromBsonDocument((BsonDocument)value); return true; } return false; }