Skip to content

Invalid path reference after lookup #5011

Open
@FriedGov

Description

@FriedGov

Hello. We recently upgraded from spring-boot-starter-parent 3.1.1 to 3.5.3 and suddenly encountered this issue.
person in this case is reference to a collection in our database.

Code:

    LookupOperation lookupOperation1 = Aggregation.lookup("person", "person.$id", "_id", "person");
    operations.add(lookupOperation1);

    Criteria criteria = new Criteria();

    criteria = criteria.andOperator(
            Criteria.where("type").is("normal"),
            Criteria.where("person.deleted").is(true)
    );

    MatchOperation matchOperation2 = Aggregation.match(criteria);
    operations.add(matchOperation2);

    GroupOperation groupOperation3 = Aggregation.group("_id").count().as("count");

    Aggregation aggregation = Aggregation.newAggregation(lookupOperation1, matchOperation2, groupOperation3);
    AggregationResults<DBObject> countResults = mongoTemplate.aggregate(aggregation, Address.class, DBObject.class);`

Result:
org.springframework.data.mapping.MappingException: Invalid path reference person.deleted; Associations can only be pointed to directly or via their id property

at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.getPath(QueryMapper.java:1274)
at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.<init>(QueryMapper.java:1134)
at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.<init>(QueryMapper.java:1111)
at org.springframework.data.mongodb.core.convert.QueryMapper.createPropertyField(QueryMapper.java:365)
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:155)
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedKeyword(QueryMapper.java:386)
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:128)
at org.springframework.data.mongodb.core.aggregation.TypeBasedAggregationOperationContext.getMappedObject(TypeBasedAggregationOperationContext.java:82)
at org.springframework.data.mongodb.core.aggregation.TypeBasedAggregationOperationContext.getMappedObject(TypeBasedAggregationOperationContext.java:77)
at org.springframework.data.mongodb.core.aggregation.InheritingExposedFieldsAggregationOperationContext.getMappedObject(InheritingExposedFieldsAggregationOperationContext.java:50)
at org.springframework.data.mongodb.core.aggregation.MatchOperation.toDocument(MatchOperation.java:74)
at org.springframework.data.mongodb.core.aggregation.AggregationOperation.toPipelineStages(AggregationOperation.java:55)
at org.springframework.data.mongodb.core.aggregation.AggregationOperationRenderer.toDocument(AggregationOperationRenderer.java:56)
at org.springframework.data.mongodb.core.aggregation.AggregationPipeline.toDocuments(AggregationPipeline.java:86)
at org.springframework.data.mongodb.core.aggregation.Aggregation.toPipeline(Aggregation.java:756)
at org.springframework.data.mongodb.core.AggregationUtil.createPipeline(AggregationUtil.java:98)
at org.springframework.data.mongodb.core.MongoTemplate.doAggregate(MongoTemplate.java:2135)
at org.springframework.data.mongodb.core.MongoTemplate.doAggregate(MongoTemplate.java:2110)
at org.springframework.data.mongodb.core.MongoTemplate.aggregate(MongoTemplate.java:2104)
at org.springframework.data.mongodb.core.MongoTemplate.aggregate(MongoTemplate.java:2019)`

However when we change lookupOperation1 to Aggregation.lookup("person", "person.$id", "_id", "p"); and the criteria to criteria = criteria.andOperator( Criteria.where("type").is("normal"), Criteria.where("p.deleted").is(true) ); it works.

It seems to occur when you assign an existing name of a reference to a lookup result. I tried finding what causes this in the change log, but no luck.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions