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个最新版本?@charlycoucreated\u at
刚刚更新,谢谢您的提问告诉我我的解决方案是否适合您的需要。如果文档的创建日期与
处的
创建日期字段不一致,则可以将\u id替换为处的创建日期。