diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs index 36841edfa..e44eb84ba 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs @@ -49,6 +49,8 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents protected override async Task SetupCollectionAsync(IMongoCollection collection) { + await collection.Indexes.TryDropOneAsync("si_1_st_1_dl_1_dt_text"); + await archiveCollection.Indexes.CreateOneAsync( Index .Ascending(x => x.Id) @@ -56,10 +58,10 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents await collection.Indexes.CreateOneAsync( Index + .Text(x => x.DataText) .Ascending(x => x.SchemaId) .Ascending(x => x.Status) - .Ascending(x => x.IsDeleted) - .Text(x => x.DataText)); + .Ascending(x => x.IsDeleted)); await collection.Indexes.CreateOneAsync( Index diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FilterBuilder.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FilterBuilder.cs index 36771266e..b39155a00 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FilterBuilder.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FilterBuilder.cs @@ -17,7 +17,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Visitors { private static readonly FilterDefinitionBuilder Filter = Builders.Filter; - public static FilterDefinition Build(ODataUriParser query, Schema schema) + public static (FilterDefinition Filter, bool Last) Build(ODataUriParser query, Schema schema) { SearchClause search; try @@ -31,7 +31,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Visitors if (search != null) { - return Filter.Text(SearchTermVisitor.Visit(search.Expression).ToString()); + return (Filter.Text(SearchTermVisitor.Visit(search.Expression).ToString()), false); } FilterClause filter; @@ -46,10 +46,10 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Visitors if (filter != null) { - return FilterVisitor.Visit(filter.Expression, schema); + return (FilterVisitor.Visit(filter.Expression, schema), true); } - return null; + return (null, false); } } } diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs index 606cd1a28..9851560bc 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs @@ -73,9 +73,16 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Visitors var filter = FilterBuilder.Build(query, schema); - if (filter != null) + if (filter.Filter != null) { - filters.Add(filter); + if (filter.Last) + { + filters.Add(filter.Filter); + } + else + { + filters.Insert(0, filter.Filter); + } } if (filters.Count == 1) diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs index 9d39e33e7..1db3eff76 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs @@ -12,6 +12,8 @@ using MongoDB.Bson; using MongoDB.Driver; using Squidex.Infrastructure.States; +#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body + namespace Squidex.Infrastructure.MongoDb { public static class MongoExtensions @@ -37,6 +39,18 @@ namespace Squidex.Infrastructure.MongoDb return true; } + public static async Task TryDropOneAsync(this IMongoIndexManager indexes, string name) + { + try + { + await indexes.DropOneAsync(name); + } + catch + { + /* NOOP */ + } + } + public static IFindFluent Only(this IFindFluent find, Expression> include) {