Ejemplo n.º 1
0
        public string BuildRelationshipExpression(string fieldName, string relationshipOperator, string value)
        {
            var operatorToken    = TranslateRelationshipOpertor(relationshipOperator);
            var manipulatedValue = value.Trim();

            if (operatorToken == "$regex")
            {
                var regexPattern = ParseHelpers.HasQuotes(value)
                    ? Regex.Escape(ParseHelpers.StripQuotes(value)).Replace(@"\", @"\\").Replace("%", ".*").Replace("_", ".")
                    : value;
                manipulatedValue = $"'^{regexPattern}$', $options: 'i'";
            }
            else if (operatorToken.InSet("$in", "$nin"))
            {
                if (manipulatedValue.StartsWith("(") && manipulatedValue.EndsWith(")"))
                {
                    manipulatedValue = $"[{manipulatedValue.Substring(1, manipulatedValue.Length - 2)}]";
                }
            }
            else if (DateTime.TryParse(ParseHelpers.StripQuotes(value), out var parsedTimestamp))
            {
                manipulatedValue = $"ISODate('{parsedTimestamp:yyyy-MM-ddTHH:mm:ssZ}')";
            }
            else if (value.ToLowerInvariant().InSet("null", "true", "false"))
            {
                manipulatedValue = manipulatedValue.ToLowerInvariant();
            }
            return($"{{ \"{fieldName}\" : {{ {operatorToken} : {manipulatedValue} }} }}");
        }