我有一个方法,它接收要删除的对象集合。
这是我现在删除它们的方式
public void deleteAll(Collection<Object> objs){
for(Object obj : objs) {
collection.remove("{ _id: # }", obj.getId());
}
}
我正在为更新做一些非常类似的事情,我循环遍历传递的Objects集合。这似乎非常耗时。
有更好的方法来进行更新/删除吗?
答案 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" });