mongodb 查询数组中某一项

本文展示了如何使用MongoDB查询特定任务数据以及更新任务状态。内容包括查询task_list中task_flow_id为2的数据,更新task_list中task_flow_id为1的任务状态,并提供了对应的Java代码实现。涉及MongoDB的查询与更新操作,以及Java对MongoDB的操作方法。
摘要由CSDN通过智能技术生成

1. mongo数据结构如下

{
    "_id": ObjectId("62625d6e418c6626322314e1"),
    "task_list": [
        {
            "task_flow_id": NumberInt("1"),
            "task_flow_name": "申报过程",
            "status": NumberInt("3"),
            "longterm": NumberInt("1"),
            "oper_id": "123",
            "oper_name": "张三",
            "create_time": "2022-04-22 15:46:54",
            "update_time": "2022-04-24 10:08:19"
        },
        {
            "task_flow_id": NumberInt("2"),
            "task_flow_name": "申报评审过程",
            "status": NumberInt("2"),
            "longterm": NumberInt("1"),
            "oper_id": "123",
            "oper_name": "张三",
            "create_time": "2022-04-22 15:46:54",
            "update_time": "2022-04-24 10:08:38"
        },
        {
            "task_flow_id": NumberInt("3"),
            "task_flow_name": "合同过程",
            "status": NumberInt("2"),
            "start_date": "2022-04-09 00:00:00",
            "end_date": "2022-05-10 00:00:00",
            "oper_id": "123",
            "oper_name": "张三",
            "create_time": "2022-04-22 15:46:54",
            "update_time": "2022-04-24 10:17:50"
        },
        {
            "task_flow_id": NumberInt("4"),
            "task_flow_name": "成员变更过程",
            "status": NumberInt("2"),
            "create_time": "2022-04-22 15:46:54",
            "update_time": "2022-04-24 10:36:34",
            "end_date": "",
            "longterm": NumberInt("1"),
            "oper_id": "123",
            "oper_name": "张三",
            "start_date": ""
        },
        {
            "task_flow_id": NumberInt("5"),
            "task_flow_name": "延期变更过程",
            "status": NumberInt("1"),
            "create_time": "2022-04-22 15:46:54",
            "update_time": "2022-04-22 15:46:54"
        },
        {
            "task_flow_id": NumberInt("6"),
            "task_flow_name": "终止变更过程",
            "status": NumberInt("1"),
            "create_time": "2022-04-22 15:46:54",
            "update_time": "2022-04-22 15:46:54"
        },
        {
            "task_flow_id": NumberInt("7"),
            "task_flow_name": "验收过程",
            "status": NumberInt("1"),
            "create_time": "2022-04-22 15:46:54",
            "update_time": "2022-04-22 15:46:54"
        }
    ],
    "create_time": "2022-04-22 15:46:54",
    "update_time": "2022-04-24 10:19:19",
    "name": "脑梗研究计划2",
    "plan_year": "2022"
}

2. 查询

查询task_list中task_flow_id为2d 数据

db.plan.find({ "_id": ObjectId("62621f42c2d824376d2bb35b"), "task_list.task_flow_id":2}, {"_id": 0, "task_list.$": 1});

3. 更新

更新tasklist中满足条件的状态

db.plan.update({
    "_id": ObjectId("62621f42c2d824376d2bb35b"),
    "task_list.task_flow_id": 1
}, {
    "$set": {"task_list.$.status": 2}
});

4. java代码

  • 获取task
public Task getTask(String planId, int flowTaskId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(planId));
        query.addCriteria(Criteria.where("task_list.task_flow_id").is(flowTaskId));

        query.fields().exclude("_id");
        query.fields().include("task_list.$");

        Plan plan = this.mongoTemplate.findOne(query, Plan.class, this.col);
        if (Objects.isNull(plan)) { return  null; }
        List<Task> taskList = plan.getTaskList();
        if (Objects.isNull(taskList) || taskList.size() < 1) { return  null; }

        return taskList.get(0);
}
  • 更新task
public void updateTask(String planId, Task task) {
      Query query = new Query();
      query.addCriteria(Criteria.where("_id").is(planId));
      query.addCriteria(Criteria.where("task_list.task_flow_id").is(task.getTaskFlowId()));

      Update update = new Update();
      update.set("task_list.$.status", task.getStatus());
      update.set("task_list.$.longterm", task.getLongterm());
      update.set("task_list.$.start_date", task.getStartDate());
      update.set("task_list.$.end_date", task.getEndDate());
      update.set("task_list.$.oper_id", task.getOperId());
      update.set("task_list.$.oper_name", task.getOperName());
      update.set("task_list.$.update_time", task.getUpdateTime());

      this.mongoTemplate.updateFirst(query, update, this.col);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值