使用Jongo更新/删除多个对象

时间:2014-06-05 04:04:21

标签: java mongodb jongo

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

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

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

我正在为更新做一些非常类似的事情,我循环遍历传递的Objects集合。这似乎非常耗时。

有更好的方法来进行更新/删除吗?

1 个答案:

答案 0 :(得分:1)

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

删除

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

使用Jongo,您可以通过几种不同的方式构建与$in匹配的列表

// 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 选项 ,以便更新适用于它匹配的所有文档,而不仅仅是第一个。

使用Jongo,这样就完成了

ObjectId[] ids = {id1, id2, id3};
collection
  .update("{ _id: { $in: # } }", ids)
  .multi()
  .with({ $set: { foo: "bar" });