Пример #1
0
        public override IEnumerator <TDocument> GetEnumerator()
        {
            var underlyingEnumerator = base.GetEnumerator();
            var profiledEnumerator   = new ProfiledEnumerator <TDocument>(underlyingEnumerator);

            profiledEnumerator.EnumerationEnded += ProfiledEnumeratorOnEnumerationEnded;

            return(profiledEnumerator);
        }
Пример #2
0
        private void ProfiledEnumeratorOnEnumerationEnded(object sender, ProfiledEnumerator <TDocument> .EnumerationEndedEventArgs enumerationEndedEventArgs)
        {
            BsonValue hint = null, orderBy = null;

            var hasHint    = Options != null && Options.TryGetValue("$hint", out hint);
            var hasOrderBy = Options != null && Options.TryGetValue("$orderby", out orderBy);

            var commandStringBuilder = new StringBuilder(1024);

            commandStringBuilder.Append(Collection.Name);
            commandStringBuilder.Append(".find(");

            if (Query != null)
            {
                commandStringBuilder.Append("query");
            }

            if (Fields != null)
            {
                commandStringBuilder.Append(",fields");
            }

            commandStringBuilder.Append(")");

            if (hasOrderBy)
            {
                commandStringBuilder.Append(".sort(orderBy)");
            }

            if (hasHint)
            {
                commandStringBuilder.Append(".hint(hint)");
            }

            if (Skip != 0)
            {
                commandStringBuilder.AppendFormat(".skip({0})", Skip);
            }

            if (Limit != 0)
            {
                commandStringBuilder.AppendFormat(".limit({0})", Limit);
            }

            if (Query != null)
            {
                commandStringBuilder.AppendFormat("\nquery = {0}", Query.ToBsonDocument());
            }

            if (Fields != null)
            {
                commandStringBuilder.AppendFormat("\nfields = {0}", Fields.ToBsonDocument());
            }

            if (hasOrderBy)
            {
                commandStringBuilder.AppendFormat("\norderBy = {0}", orderBy.ToBsonDocument());
            }

            if (hasHint)
            {
                commandStringBuilder.AppendFormat("\nhint = {0}", hint.ToBsonDocument());
            }

            // TODO: implement other options printout if needed

            string commandString = commandStringBuilder.ToString();

            ProfilerUtils.AddMongoTiming(commandString, (long)enumerationEndedEventArgs.Elapsed.TotalMilliseconds, ExecuteType.Read);
        }