java - Java Spring Data 中的 MongoDB $graphlookup

标签 java spring mongodb aggregation

我正在寻找一种在 Resful Web API 中使用 Java 实现 graphlookup 的方法。我正在尝试像 MongoDB ( https://docs.mongodb.com/v3.4/reference/operator/aggregation/graphLookup/ ) 上那样实现层次结构

    { "_id" : 1, "name" : "Dev" }
    { "_id" : 2, "name" : "Eliot", "reportsTo" : "Dev" }
    { "_id" : 3, "name" : "Ron", "reportsTo" : "Eliot" }
    { "_id" : 4, "name" : "Andrew", "reportsTo" : "Eliot" }
    { "_id" : 5, "name" : "Asya", "reportsTo" : "Ron" }
    { "_id" : 6, "name" : "Dan", "reportsTo" : "Andrew" }

这是员工集合,我想要的是能够创建存储在 MongoDB 中的这个结构

 {
   "_id" : 1,
   "name" : "Dev",
   "reportingHierarchy" : [ ]
}
{
   "_id" : 2,
   "name" : "Eliot",
   "reportsTo" : "Dev",
   "reportingHierarchy" : [
      { "_id" : 1, "name" : "Dev" }
   ]
}
{
   "_id" : 3,
   "name" : "Ron",
   "reportsTo" : "Eliot",
   "reportingHierarchy" : [
      { "_id" : 1, "name" : "Dev" },
      { "_id" : 2, "name" : "Eliot", "reportsTo" : "Dev" }
   ]
}

我见过这样的聚合示例,但在 graphlookup 上却没有看到

Aggregation agg = newAggregation(
        match(Criteria.where("pageId").is("2210")),
        unwind("postIds"),
        group("_id").sum("1").as("sum")
        //project("$sum").and("pageId").previousOperation()
    );

有没有办法让 graphlookup 变成这样的格式?我可以使用 GraphLookupOperation,然后使用诸如获取 map 结果之类的方法,而不是使用匹配、展开、分组。

最佳答案

AggregationOperation aggregationOperation = new AggregationOperation() {
        @Override public DBObject toDBObject(AggregationOperationContext aggregationOperationContext) {
            DBObject graphLookup = new BasicDBObject(
                    "from", "individual").append(
                    "startWith", "$reportsTo").append(
                    "connectFromField", "reportsTo").append(
                    "connectToField", "firstName").append(
                    "maxDepth", 2).append(
                    "as", "reportingHierarchy");
            return new BasicDBObject("$graphLookup", graphLookup);

此代码允许解决方法,因为我使用的是旧版本,我认为是 1.10.0 spring mongo。现在我遇到了“reportingHierarchy”的问题,看起来不像我想要的那样。它没有给我一个名字。只是 reportsTo 和 reportingHierarchy 也包括我不想要的 _class 。

关于java - Java Spring Data 中的 MongoDB $graphlookup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47764704/

相关文章:

java - 随机播放函数复杂性

java - 我应该做哪些注释和配置来解析 JSON 对象

c++ - 如何在 MongoDB C++ 驱动程序中使用 DBClientBase 类插入文档?

c# - 如何在mongodb的一个查询中从两个集合中获取数据?

java - 通用抽象类的自定义 Jackson 反序列化

arrays - 如果存在则更新数组中的元素,否则在 MongoDb 中的该数组中插入新元素

java - AtomicInteger真的产生原子整数吗?

java - 如何在 KeyListener 中调用 Graphics 方法?

java - 注释或关键字告诉对象的垃圾收集器首先删除

java - 如何解决 javax.validation.ValidationException : HV000064: Unable to instantiate ConstraintValidator: in Spring