gpt4 book ai didi

spring-data-mongodb - 无法在 Spring 数据 mongodb $graphLookup 中使用子文档字段

转载 作者:行者123 更新时间:2023-12-05 05:19:52 25 4
gpt4 key购买 nike

集合test_links中的文档看起来:

{ 
"_id" : "57:58",
"from" : {
"orgunitType" : "Regional",
"refId" : "57",
"name" : "Root Node"
},
"to" : {
"orgunitType" : "Department",
"refId" : "58",
"name" : "Department1"
},
"active" : true,
}

在尝试实现 MongoDB 聚合查询时:

db.test_links.aggregate([
{$match: {"to.refId":"64"}},
{$graphLookup:{
from: "test_links",
startWith: "$to.refId",
connectFromField: "from.refId",
connectToField: "to.refId",
as: "parents"
}}]);

作为 Spring Data MongoDB:

Aggregation agg = Aggregation.newAggregation(match(where("to.refId").is(id)),
graphLookup("test_links").startWith("$to.refId").connectFrom("from.refId")
.connectTo("to.refId").as("parent")
);
AggregationResults results = infraTemplate.aggregate(agg, "test_links", Map.class);

connectFromconnectTo 字段值(from.refId、to.refId)替换为 refId(“from”和“to”剥离)。结果,查询不返回任何结果。AggregationField 类的构造函数在target 字段中保留原始名称并设置剥离的name(“refId”)。问题是 GraphLookupOperation.toDocument 方法使用 field.getName() 而不是 field.getTarget():

...
graphLookup.put("connectFromField", connectFrom.getName());
graphLookup.put("connectToField", connectTo.getName());
...

有解决办法吗?它会在未来的版本中修复吗?我知道我可以创建自己的 CustomAggregationOperation,但如果有人尝试开发它,使用开箱即用的功能会很好。

Spring Data MongoDB 版本 2.0.0.M4

最佳答案

spring-boot-starter-data-mongodb\1.5.4.RELEASE 中有相同的行为,不确定它是否预期如此,但我找到了解决方法。

connectToField: "to.refId" 的问题是这里使用了嵌入值,通过提供该字段的完整路径一切正常,正如预期的那样,因此应该更改为:connectToField : "COLLECTION_NAME.to.refId"

关于spring-data-mongodb - 无法在 Spring 数据 mongodb $graphLookup 中使用子文档字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45424401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com