【问题标题】:Spring Data Mongo - Perform Distinct, but doesn't wants to pull embedded documents in resultsSpring Data Mongo - 执行不同,但不想在结果中提取嵌入文档
【发布时间】:2020-05-05 07:41:33
【问题描述】:

我正在开发Spring Boot and Spring Data Mongo 示例。在此示例中,我只想获取不同的部门,但我不想影响子部门。我需要更改什么查询?

db.employees.distinct("departments");

数据:

{
    "firstName" : "Laxmi",
    "lastName" : "Dekate",
    .....
    .......
    .....

    "departments" : {
        "deptCd" : "Tax",
        "deptName" : "Tax Handling Dept",
        "status" : "A",
        "subdepts" : [ 
            {
                "subdeptCd" : "1D",
                "subdeptName" : "Tax Clearning",
                "desc" : "",
                "status" : "A"
            }
        ]
    },
}

【问题讨论】:

  • db.collection.distinct 没有投影选项。为此,您必须使用聚合。
  • 你能告诉我我们该怎么做吗?
  • 更正。此代码将获得不同的 deptCd: db.employees.distinct("departments.deptCd");。输出将是:[ "Tax" ].
  • 嘿 Prasad,其实我也想要整个 deptCd、deptName、Status 字段
  • 您正在寻找的独特价值是什么?不一样的deptCd ?

标签: mongodb spring-data-mongodb


【解决方案1】:

聚合获得不同的departments.deptCd 值(以及其他详细信息):

db.collection.aggregate( [
{
    $group: { _id: "$departments.deptCd", 
             deptName: { $first: "$departments.deptName" },
             status: { $first: "$departments.status" }
    }
},
{
    $project: { deptCd: "$_id", _id: 0, deptName: 1, status: 1 }
}
] )

输出:

{ "deptName" : "Tax Handling Dept", "status" : "A", "deptCd" : "Tax" }


[编辑添加]

使用 Spring Data MongoDB v2.2.7 的代码:

MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "testdb");
Aggregation agg = Aggregation.newAggregation(
    Aggregation.group("departments.deptCd")
        .first("departments.deptName").as("deptName")
        .first("departments.status").as("status"),
    Aggregation.project("deptName", "status")
        .and("_id").as("deptCd")
        .andExclude("_id")
);
AggregationResults<Document> results = mongoOps.aggregate(agg, "collection", Document.class);
results.forEach(System.out::println);

【讨论】:

  • 谢谢,这里怎么分页?
  • 分页是什么意思?
  • 在spring data mongodb中有org.springframework.data.domain.Pageable接口和一个仓库PagingAndSortingRepository
  • 我熟悉分页,一般来说,不熟悉 Spring Data MongoDB API。文档说, Pageable 和 PagingAndSortingRepository 一起使用。见Repositories - Core concepts。也有例子。
  • 你能分享一下 Spring Data Mongo 的等价物吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 2014-05-15
  • 2020-09-22
  • 2020-10-31
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
相关资源
最近更新 更多