예제 #1
0
        public ProjectionDefinition <T, T> Compile <T>(FieldSpec fieldSpec)
        {
            var sb = new StringBuilder();

            sb.Append("{ ");

            for (int i = 0; i < fieldSpec.Fields.Length; i++)
            {
                var    field = fieldSpec.Fields[i];
                string name  = MongoNameFixer.Field(field.Name);

                if (String.CompareOrdinal(name, "textScore") == 0)
                {
                    sb.AppendFormat("{0} : {{ $meta : \"textScore\" }}", name);
                }
                else if (field.Presence == FieldSpecPresence.Included)
                {
                    sb.AppendFormat("{0} : 1", name);
                }
                else
                {
                    sb.AppendFormat("{0} : 0", name);
                }

                if (i < fieldSpec.Fields.Length - 1)
                {
                    sb.Append(", ");
                }
            }

            sb.Append(" }");

            return(new BsonDocumentProjectionDefinition <T, T>(BsonSerializer.Deserialize <BsonDocument>(sb.ToString())));
        }
예제 #2
0
        protected override RqlExpression VisitIdentifier(RqlIdentifierExpression node)
        {
            sb.Append("\"");
            sb.Append(MongoNameFixer.Field(node.Name));
            sb.Append("\": ");

            return(node);
        }
예제 #3
0
        public SortDefinition <T> Compile <T>(SortSpec sortSpec)
        {
            var sb = new StringBuilder();

            sb.Append("{ ");

            for (int i = 0; i < sortSpec.Fields.Length; i++)
            {
                var field = sortSpec.Fields[i];
                var name  = MongoNameFixer.Field(field.Name);

                sb.AppendFormat("{0} : {1}", name, field.Order == SortSpecSortOrder.Ascending ? "1" : "-1");

                if (i < sortSpec.Fields.Length - 1)
                {
                    sb.Append(", ");
                }
            }

            sb.Append(" }");

            return(new BsonDocumentSortDefinition <T>(BsonSerializer.Deserialize <BsonDocument>(sb.ToString())));
        }