【发布时间】: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:如果您可以将您的评论作为答案发表,我会接受。谢谢。