我有一个方法可以接收要删除的对象集合。
这就是我现在删除它们的方式
public void deleteAll(Collection<Object> objs){
for(Object obj : objs) {
collection.remove("{ _id: # }", obj.getId());
}
}
我正在做一些非常相似的更新,我正在循环通过传递的对象集合。这似乎非常耗时。
有没有更好的更新/删除方法?
可以使用单个查询来删除和更新多个文档。
消除
您需要使用带有选择器的查询,以及要匹配$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" });