【问题标题】:Spring Mongo Query, remove objects in collection matching listSpring Mongo Query,删除集合匹配列表中的对象
【发布时间】:2017-08-22 07:51:38
【问题描述】:

如何通过传递要删除的对象列表从 mongo 集合中删除对象:我正在使用 spring 和 mongo 存储库,以下是我的代码:

 public void removeDocuments(List<PayloadLogs> listLogs){

     String collectionName = mongoTemplate.getCollectionName(Logs.class);
     Query removeQuery = Query.query(Criteria.where("typeHash").in(listLogs));

// this does not removes the documents.
    this.mongoTemplate.findAllAndRemove(removeQuery, PayloadLogs.class, collectionName);
}

查询日志:

db.getCollection('payloadLogs').find({
"creativeHash": {
    "$in": [{
        "creativeHash": "21540209fa87504bbbb0dd173c41d742",
        "lastAccessedAt": null,
        ....
    }]
}

});

【问题讨论】:

  • 您实际上并不想传入整个对象。您只需要一个“唯一标识符”或至少一个标识要从集合中删除的文档的东西。单个值或与整个事物匹配的值列表。在这种情况下,您只需提取 "creativeHash" 值作为这些值的列表。前提是确实确定要删除的文档,并且它当然不会匹配其他文档。
  • 谢谢@NeilLunn,假设我有一个对象列表,可以根据已经编写的一些复杂标准获取。我怎样才能删除这些?或者我只需要使用“logHash”创建一个新列表?复制记录。
  • 如果您需要一个包含多个字段值作为条件的“列表”,那么您可以使用$or。由于$in 本质上是$or 在单个属性上的“简写”,因此这是合乎逻辑的过程。您应该花一些时间阅读Query and Projection Operators 并了解每个实际应用的位置。一旦您了解了每种方法的实际应用方式,它就会回答很多问题。
  • @NeilLunn:如果您可以将您的评论作为答案发表,我会接受。谢谢。

标签: java spring mongodb


【解决方案1】:

我认为这会有所帮助,请将您的 id 添加到列表中并按 id 删除

  BasicDBObject query = new BasicDBObject();
  List<Integer> list = new ArrayList<Integer>();
  list.add(10004);
  list.add(10005);
  query.put("_id", new BasicDBObject("$in", list));
  collection.remove(query);

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 2019-05-12
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多