diff --git a/Mongo_Engine/Convert/MongoQuery.cs b/Mongo_Engine/Convert/MongoQuery.cs index 678a228..fdf2974 100644 --- a/Mongo_Engine/Convert/MongoQuery.cs +++ b/Mongo_Engine/Convert/MongoQuery.cs @@ -20,9 +20,13 @@ * along with this code. If not, see . */ +using BH.Engine.Reflection; +using BH.oM.Base.Attributes; using BH.oM.Data.Requests; using MongoDB.Bson; +using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; namespace BH.Engine.Adapters.Mongo @@ -30,9 +34,12 @@ namespace BH.Engine.Adapters.Mongo public static partial class Convert { /***************************************************/ - /**** Public Interface ****/ + /**** Public Interface ****/ /***************************************************/ + [Description("Converts a given IRequest into Bson document.")] + [Input("query", "Request to be converted to a Bson document.")] + [Output("document", "Bson document that resulted from converting the input request.")] public static BsonDocument IToMongoQuery(this IRequest query) { return ToMongoQuery(query as dynamic); @@ -40,9 +47,12 @@ public static BsonDocument IToMongoQuery(this IRequest query) /***************************************************/ - /**** Private Methods - Curves ****/ + /**** Public Methods ****/ /***************************************************/ + [Description("Converts a given CustomRequest into Bson document.")] + [Input("query", "Request to be converted to a Bson document.")] + [Output("document", "Bson document that resulted from converting the input request.")] public static BsonDocument ToMongoQuery(this CustomRequest query) { return BsonDocument.Parse(query.Body); @@ -50,6 +60,9 @@ public static BsonDocument ToMongoQuery(this CustomRequest query) /***************************************************/ + [Description("Converts a given FilterRequest into Bson document.")] + [Input("query", "Request to be converted to a Bson document.")] + [Output("document", "Bson document that resulted from converting the input request.")] public static BsonDocument ToMongoQuery(this FilterRequest query) { BsonDocument document = new BsonDocument(); @@ -57,10 +70,26 @@ public static BsonDocument ToMongoQuery(this FilterRequest query) // Define the match if (query.Equalities == null) query.Equalities = new Dictionary(); + BsonDocument equalities = query.Equalities.ToBsonDocument(); if (query.Type != null) - equalities["_t"] = query.Type.ToString(); + { + BsonArray typeEqualities = new BsonArray(); + + // Add requested type if it is not an interface + if (!query.Type.IsInterface) + typeEqualities.Add(new BsonDocument { { "_t", query.Type.ToString() } }); + + // Add subtypes of the requested type + foreach (Type subtype in query.Type.Subtypes()) + { + typeEqualities.Add(new BsonDocument { { "_t", subtype.ToString() } }); + } + + equalities.Add(new BsonElement("$or", typeEqualities)); + } + if (query.Tag != "") equalities["__Tag__"] = query.Tag; @@ -71,6 +100,9 @@ public static BsonDocument ToMongoQuery(this FilterRequest query) /***************************************************/ + [Description("Converts a given IResultRequest into Bson document.")] + [Input("query", "Request to be converted to a Bson document.")] + [Output("document", "Bson document that resulted from converting the input request.")] public static BsonDocument ToMongoQuery(this IResultRequest query) { BsonDocument document = new BsonDocument(); @@ -97,6 +129,8 @@ public static BsonDocument ToMongoQuery(this IResultRequest query) } + /***************************************************/ + /**** Fallback Methods ****/ /***************************************************/ private static BsonDocument ToMongoQuery(this IRequest query) diff --git a/Mongo_Engine/Mongo_Engine.csproj b/Mongo_Engine/Mongo_Engine.csproj index 08315ed..4665326 100644 --- a/Mongo_Engine/Mongo_Engine.csproj +++ b/Mongo_Engine/Mongo_Engine.csproj @@ -3,7 +3,7 @@ netstandard2.0 6.0.0.0 - https://github.com/BHoM/Mongo_Toolkit + https://github.com/BHoM/Mongo_Toolkit 5.0.0 BHoM Copyright © https://github.com/BHoM @@ -41,6 +41,11 @@ C:\ProgramData\BHoM\Assemblies\Data_oM.dll False + + C:\ProgramData\BHoM\Assemblies\Reflection_Engine.dll + False + False + False C:\ProgramData\BHoM\Assemblies\Serialiser_Engine.dll