1

我有一个方法可以接收要删除的对象集合。

这就是我现在删除它们的方式

public void deleteAll(Collection<Object> objs){
     for(Object obj : objs) {
       collection.remove("{ _id: # }", obj.getId());
     }
}

我正在做一些非常相似的更新,我正在循环通过传递的对象集合。这似乎非常耗时。

有没有更好的更新/删除方法?

4

1 回答 1

2

可以使用单个查询来删除和更新多个文档。

消除

您需要使用带有选择器的查询,以及要匹配$in的值数组。_id

$in使用 Jongo,您可以通过几种不同的方式将要匹配的列表构建到查询中

// pass an array of ids
ObjectId[] ids = {id1, id2, id3};
collection.remove("{ _id: { $in: # } }", ids);

// or pass each id separately
collection.remove("{ _id: { $in:[#, #, #] }}", id1, id2, id3);

更新

与上面完全相同的概念$in用于选择要更新的对象,但是您还必须设置 multi option,以便更新适用于它匹配的所有文档,而不仅仅是第一个。

使用 Jongo 可以这样完成

ObjectId[] ids = {id1, id2, id3};
collection
  .update("{ _id: { $in: # } }", ids)
  .multi()
  .with({ $set: { foo: "bar" });
于 2015-07-23T05:26:23.243 回答