如何用Spring Data MongoDB Java API在$project阶段编写generatedDate: new Date()
实现方式1:使用官方提供的日期操作API(推荐)
直接用Spring Data MongoDB内置的DateOperators.Now工具类,这是最规范的写法,兼容性最好,将你代码中标注的行替换为以下内容即可:
.and(DateOperators.Now.now()).as("generatedDate");
需要提前导入对应工具类:
import org.springframework.data.mongodb.core.aggregation.DateOperators;
实现方式2:使用原生表达式写法
如果你的Spring Data MongoDB版本支持表达式注入,也可以直接写MongoDB原生的表达式逻辑,写法更贴近shell语句:
.andExpression("new Date()").as("generatedDate");
完整代码示例
修改后的完整ProjectionOperation代码如下:
ProjectionOperation finalProject = project("coachingSummary", "formCreatedDate") .and("$patientContact.organization.name").as("customerName") .and("coach") .nested(Fields.from( Fields.field("firstName", "coach.firstName"), Fields.field("lastName", "coach.lastName"), Fields.field("employeeId", "coach._id") )) .and("patient") .nested(Fields.from( Fields.field("firstName", "patientContact.patient.firstName"), Fields.field("lastName", "patientContact.patient.lastName"), Fields.field("contactId", "patientContact._id") )) .and(DateOperators.Now.now()).as("generatedDate");
说明
以上两种写法生成的聚合语句都会匹配你需要的generatedDate: new Date()逻辑,时间由MongoDB服务端在执行聚合操作时生成,不会使用Java应用侧的本地时间,完全符合你的需求。
内容的提问来源于stack exchange,提问作者vbg
相关产品推荐
相关产品推荐

