【问题标题】:How to Delete nested objects in array in Spring MongoDB如何在 Spring MongoDB 中删除数组中的嵌套对象
【发布时间】:2021-05-31 11:15:00
【问题描述】:

我有一个 MongoDB 的 Spring 项目。我没有域类,因为我的项目以通用方式处理数据。 我正在尝试删除数组中的一些对象,但我不能。我已经搜索过 StackOverflow,但找到的信息并没有帮助我解决这个问题。以下是我收藏中的文档的摘要示例:

{ _id
  dispositivos:[
            { uid },
            { uid }
}

我尝试仅删除具有我在 id 列表中传递的 id 的对象。 这是我迄今为止尝试过的,但它不起作用。

    public UpdateResult deleteDispositivosByIds(String idCentro, List<String> ids) {
        // NOT WORKING--------
        
//      ObjectId objectId = new ObjectId(idCentro);
//      Query query = new Query();
//      query.addCriteria(Criteria.where("_id").is(objectId));
//      Update update = new Update();
//      BasicDBObject[] boArray = new BasicDBObject[ids.size()];
//      String[] idsArray = new String[ids.size()];
//      idsArray=ids.toArray(idsArray);
//      for (int i = 0; i < boArray.length; i++) {
//          boArray[i]=new BasicDBObject("uid",idsArray[i]);
//          System.out.println(idsArray[i]);
//        }
//      update.pullAll("dispositivos",boArray );            
//      mongoTemplate.updateFirst(query, update, "centros");
//      return null;
        
        // NOT WORKING--------
        
//      ObjectId objectId = new ObjectId(idCentro);
//      Query query = new Query();
//      query.addCriteria(Criteria.where("_id").is(objectId));
//      Update update = new Update();       
//      update.pullAll("dispositivos",ids.toArray() );          
//      mongoTemplate.updateFirst(query, update, "centros");
//      return null;
        
        // NOT WORKING--------
        
        ObjectId objectId = new ObjectId(idCentro);
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(objectId));
        query.addCriteria(Criteria.where("dispositivos.uid").in(ids));
        Update update = new Update();       
        update.pull("dispositivos", query );            
        mongoTemplate.updateFirst(new Query(), update, "centros");
        return null;
    }

【问题讨论】:

标签: java spring mongodb mongotemplate


【解决方案1】:

这是我的解决方案(“centros”是集合名称):

    public UpdateResult deleteDispositivosByIds(String idCentro, List<String> ids) {

        
        ObjectId objectId = new ObjectId(idCentro);
        
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(objectId));
        
        Update update = new Update();       
        update.pull("dispositivos", new Query(Criteria.where("uid").in(ids)) );
        
        return mongoTemplate.updateFirst(query, update, "centros");     
        
    }

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2021-04-19
    • 1970-01-01
    • 2017-05-18
    • 2023-01-31
    • 2019-12-13
    相关资源
    最近更新 更多