如何删除 Spring MongoDB 数组中嵌套的 objects
How to Delete nested objects in array in Spring MongoDB
我有一个 Spring 项目 MongoDB。我没有域 class,因为我的项目以通用方式处理数据。
我正在尝试删除数组中的一些 objects 但我不能。我已经搜索过 Whosebug,但找到的信息并没有帮助我解决这个问题。这是我的 Collection:
中文档的总结示例
{ _id
dispositivos:[
{ uid },
{ uid }
}
我尝试只删除具有我在 ID 列表中传递的 ID 的 objects。
到目前为止,这是我尝试过的方法,但它不起作用。
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;
}
这是我的解决方案(“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");
}
我有一个 Spring 项目 MongoDB。我没有域 class,因为我的项目以通用方式处理数据。 我正在尝试删除数组中的一些 objects 但我不能。我已经搜索过 Whosebug,但找到的信息并没有帮助我解决这个问题。这是我的 Collection:
中文档的总结示例{ _id
dispositivos:[
{ uid },
{ uid }
}
我尝试只删除具有我在 ID 列表中传递的 ID 的 objects。 到目前为止,这是我尝试过的方法,但它不起作用。
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;
}
这是我的解决方案(“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");
}