From facdb2168a51fc3c6566598bd0c4370251378523 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 11 Sep 2023 22:22:33 +0200 Subject: [PATCH] Fix lookup. --- .../Contents/Operations/Extensions.cs | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/Extensions.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/Extensions.cs index da077c338..5a1cc11ca 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/Extensions.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/Extensions.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Attributes; using MongoDB.Driver; @@ -18,6 +19,15 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Operations; public static class Extensions { + private static readonly BsonDocument LookupLet = + new BsonDocument() + .Add("id", "$_id"); + + private static readonly BsonDocument LookupMatch = + new BsonDocument() + .Add("$expr", new BsonDocument() + .Add("$eq", new BsonArray { "$_id", "$$id" })); + private static Dictionary propertyMap; public static IReadOnlyDictionary PropertyMap @@ -113,8 +123,15 @@ public static class Extensions .QuerySort(query) .QuerySkip(query) .QueryLimit(query) - .Lookup(collection, x => x.Id, x => x.DocumentId, x => x.Joined) - .SelectFields(q.Fields) + .Lookup(collection, + LookupLet, + PipelineDefinitionBuilder.For() + .Match(LookupMatch) + .Project( + BuildProjection2(q.Fields)), + x => x.Joined) + .Project( + Builders.Projection.Include(x => x.Joined)) .ToListAsync(ct); return joined.Select(x => x.Joined[0]).ToList(); @@ -147,15 +164,15 @@ public static class Extensions public static IFindFluent SelectFields(this IFindFluent find, IEnumerable? fields) { - return find.Project(BuildProjection(fields)); + return find.Project(BuildProjection2(fields)); } public static IAggregateFluent SelectFields(this IAggregateFluent find, IEnumerable? fields) { - return find.Project(BuildProjection(fields)); + return find.Project(BuildProjection2(fields)); } - private static ProjectionDefinition BuildProjection(IEnumerable? fields) + private static ProjectionDefinition BuildProjection2(IEnumerable? fields) { var projector = Builders.Projection; var projections = new List>();