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); } }
protected IMongoQuery WrapQuery(IMongoQuery query, BsonDocument options, ReadPreference readPreference, bool forShardRouter) { BsonDocument formattedReadPreference = null; if (forShardRouter && readPreference != null && 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 (options == null && formattedReadPreference == null) { return(query); } else { var queryDocument = (query == null) ? (BsonValue) new BsonDocument() : BsonDocumentWrapper.Create(query); var wrappedQuery = new QueryDocument { { "$query", queryDocument }, { "$readPreference", formattedReadPreference, formattedReadPreference != null }, // only if sending query to a mongos }; if (options != null) { wrappedQuery.Merge(options); } return(wrappedQuery); } }
protected IMongoQuery WrapQuery(IMongoQuery query, BsonDocument options, ReadPreference readPreference, bool forShardRouter) { BsonDocument formattedReadPreference = null; if (forShardRouter && readPreference != null && 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 (options == null && formattedReadPreference == null) { return query; } else { var queryDocument = (query == null) ? (BsonValue)new BsonDocument() : BsonDocumentWrapper.Create(query); var wrappedQuery = new QueryDocument { { "$query", queryDocument }, { "$readPreference", formattedReadPreference, formattedReadPreference != null }, // only if sending query to a mongos }; if (options != null) { wrappedQuery.Merge(options); } return wrappedQuery; } }