Пример #1
0
        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);
     }
 }