spring mongoTemplate批量查找

spring mongoTemplate批量查找,spring,mongotemplate,Spring,Mongotemplate,我有一个员工集合,看起来像: { _id company_id job_type name age created_at ... } 我需要一份公司ID的列表,对于每一个ID,我想得到工作类型=“兼职”的最新3名员工和工作类型=“实习生”的最新3名员工(根据在字段创建的) 我怎么能用一个电话做这样的事? 带有mongoTemplate.bulkOps的答案也将有效。要获取最新信息,可以使用自动创建的\u id字段,该字段中嵌入了日期。假设集合的名称为employee,则可以使用以下聚合: db

我有一个员工集合,看起来像:

{
_id
company_id
job_type
name
age
created_at
...
}
我需要一份
公司ID的列表
,对于每一个ID,我想得到
工作类型=“兼职”
的最新3名员工和
工作类型=“实习生”
的最新3名员工(根据在
字段创建的

我怎么能用一个电话做这样的事?
带有
mongoTemplate.bulkOps
的答案也将有效。

要获取最新信息,可以使用自动创建的\u id字段,该字段中嵌入了日期。假设集合的名称为
employee
,则可以使用以下聚合:

db.employee.aggregate([
{
    $facet: {
        "part_time": [
            {
                $match: {
                    "job_type": "part_time"
                }
            },
            {
                $match: {
                    "company_id": "id_from_your_list"
                }
            },
            { $sort: { "_id": 1 } },
            {
                $limit: 3
            }
        ],
        "intern": [
            {
                $match: {
                    "job_type": "intern"
                }
            },
            {
                $match: {
                    "company_id": "id_from_your_list"
                }
            },
            { $sort: { "_id": 1 } },
            {
                $limit: 3
            }
        ]
    }
}])
我假设您使用的是spring data mongodb,您可以使用
MongoTemplate
helper执行此聚合操作

FacetOperation facetOperation = facet().and(match(Criteria.where("job_type").is("part_time")),match(Criteria.where("company_id").is("company_id_from_your_list")),
sort(Sort.Direction.ASC, "_id"),
limit(3)).as("part_time")
.and(match(Criteria.where("job_type").is("intern")),match(Criteria.where("company_id").is("company_id_from_your_list")),
sort(Sort.Direction.ASC, "_id"),
limit(3)).as("intern");
mongoTemplate.aggregate(Aggregation.newAggregation(facetOperation), "employee", Document.class).getUniqueMappedResult();

您希望根据哪些标准对员工进行排序,以获得3个最新版本?@charlycou
created\u at
刚刚更新,谢谢您的提问告诉我我的解决方案是否适合您的需要。如果文档的创建日期与
处的
创建日期字段不一致,则可以将\u id替换为处的创建日期。