首页 > 解决方案 > 如何使用spring mongo从嵌套的文档数组中删除元素

问题描述

我有以下类型的文档代表 Mongo DB 中的项目:

{
    "_id" : "5f69c22b669f2d3b308ce2e2",
    "actions" : [ 
        {
            "_id" : "1",
            ...
        }, 
        {
            "_id" :"2",
            ...
        }, 
        {
            "_id" : "n",
            ...
        },
        ...
    ]
}

并且我想通过项目 projectId 的 actionsIds 删除指定的操作。

我尝试了下面的代码:

mongoOperation.updateMulti(
    Query.query(Criteria.where("id").is(projectId)),
    new Update().pull("actions", Query.query(Criteria.where("id").in(actionIds))),
    Project.class
);

但它不会删除任何东西。

请问你能帮帮我吗 ?

谢谢

标签: javamongodbspring-dataspring-mongodb

解决方案


我终于想出了如何做到这一点:

DBObject pullUpdate = BasicDBObjectBuilder.start().add(
      "id",
      BasicDBObjectBuilder.start().add("$in", actionIds).get()
).get();
mongoOperation.updateMulti(
      Query.query(Criteria.where("id").is(projectId)),
      new Update().pull("actions", pullUpdate),
      Project.class
);

推荐阅读