コード例 #1
0
        /// <summary>
        /// Add two number values. If any side are string, concat left+right as string
        /// </summary>
        public static BsonValue ADD(BsonValue left, BsonValue right)
        {
            // if both sides are string, concat
            if (left.IsString && right.IsString)
            {
                return(left.AsString + right.AsString);
            }
            // if any sides are string, concat casting both to string
            else if (left.IsString || right.IsString)
            {
                return(BsonExpressionMethods.STRING(left).AsString + BsonExpressionMethods.STRING(right).AsString);
            }
            // if any side are DateTime and another is number, add days in date
            else if (left.IsDateTime && right.IsNumber)
            {
                return(left.AsDateTime.AddDays(right.AsDouble));
            }
            else if (left.IsNumber && right.IsDateTime)
            {
                return(right.AsDateTime.AddDays(left.AsDouble));
            }
            // if both sides are number, add as math
            else if (left.IsNumber && right.IsNumber)
            {
                return(left + right);
            }

            return(BsonValue.Null);
        }
コード例 #2
0
        /// <summary>
        /// Create multi documents based on key-value pairs on parameters. DOCUMENT('_id', 1)
        /// </summary>
        public static BsonValue DOCUMENT_INIT(string[] keys, BsonValue[] values)
        {
            ENSURE(keys.Length == values.Length, "both keys/value must contains same length");

            // test for special JsonEx data types (date, numberLong, ...)
            if (keys.Length == 1 && keys[0][0] == '$' && values[0].IsString)
            {
                switch (keys[0])
                {
                case "$binary": return(BsonExpressionMethods.BINARY(values[0]));

                case "$oid": return(BsonExpressionMethods.OBJECTID(values[0]));

                case "$guid": return(BsonExpressionMethods.GUID(values[0]));

                case "$date": return(BsonExpressionMethods.DATE(Collation.Binary, values[0]));

                case "$numberLong": return(BsonExpressionMethods.LONG(values[0]));

                case "$numberDecimal": return(BsonExpressionMethods.DECIMAL(Collation.Binary, values[0]));

                case "$minValue": return(BsonExpressionMethods.MINVALUE());

                case "$maxValue": return(BsonExpressionMethods.MAXVALUE());
                }
            }

            var doc = new BsonDocument();

            for (var i = 0; i < keys.Length; i++)
            {
                doc[keys[i]] = values[i];
            }

            return(doc);
        }