private IMongoQuery WrapQuery() { BsonDocument formattedReadPreference = null; if (_serverInstance.InstanceType == MongoServerInstanceType.ShardRouter && _readPreference.ReadPreferenceMode != ReadPreferenceMode.Primary) { BsonArray tagSetsArray = null; if (_readPreference.TagSets != null) { tagSetsArray = new BsonArray(); foreach (var tagSet in _readPreference.TagSets) { var tagSetDocument = new BsonDocument(); foreach (var tag in tagSet) { tagSetDocument.Add(tag.Name, tag.Value); } tagSetsArray.Add(tagSetDocument); } } if (tagSetsArray != null || _readPreference.ReadPreferenceMode != ReadPreferenceMode.SecondaryPreferred) { formattedReadPreference = new BsonDocument { { "mode", MongoUtils.ToCamelCase(_readPreference.ReadPreferenceMode.ToString()) }, { "tags", tagSetsArray, tagSetsArray != null } // optional }; } } if (_cursor.Options == null && formattedReadPreference == null) { return(_cursor.Query); } else { var query = (_cursor.Query == null) ? (BsonValue) new BsonDocument() : BsonDocumentWrapper.Create(_cursor.Query); var wrappedQuery = new QueryDocument { { "$query", query }, { "$readPreference", formattedReadPreference, formattedReadPreference != null }, // only if sending query to a mongos }; if (_cursor.Options != null) { wrappedQuery.Merge(_cursor.Options); } return(wrappedQuery); } }
private IMongoQuery WrapQuery() { if (cursor.Options == null) { return(cursor.Query); } else { var query = (cursor.Query == null) ? (BsonValue) new BsonDocument() : BsonDocumentWrapper.Create(cursor.Query); var wrappedQuery = new QueryDocument("$query", query); wrappedQuery.Merge(cursor.Options); return(wrappedQuery); } }