2013-09-02 48 views
26

Tôi có danh sách mongo '_id' mà tôi muốn xóa. Hiện tại, tôi đang thực hiện điều nàyXóa nhiều tài liệu khỏi mongo trong một truy vấn

# inactive_users --> list of inactive users 
for item in inactive_users: 
    db.users.remove({'_id' : item}) 

nhưng vấn đề của tôi là danh sách quá lớn ... (có thể lên tới 100.000+). Vì vậy, truy vấn cho mọi mục trong danh sách sẽ chỉ tăng tải trên máy chủ. Là một cách của họ để vượt qua toàn bộ danh sách trong truy vấn mongo để tôi không phải cháy truy vấn một lần nữa và một lần nữa.

Cảm ơn bạn

Trả lời

48
db.users.remove({'_id':{'$in':inactive_users}}) 
9

Danh sách tất cả chúng và sử dụng $in điều hành:

db.users.remove({_id:{$in:[id1, id2, id3, ... ]}}) 
+2

Nếu danh sách thực sự là 100 000+ mục lớn, bạn có thể muốn chia nhỏ thành vài trăm cho mỗi cuộc gọi. –

3

Bạn cần phải vượt qua id trong một định dạng cụ thể sử dụng ObjectId():

db.users.remove({_id: {$in: [ObjectId('Item1'), ObjectId('Item2'), ObjectId('Item2')]}}); 

Remove doesn không chấp nhận số nguyên - bạn phải sử dụng ObjectId bản sao có định dạng _id dưới dạng string.

2
var collection = db.users; 
var usersDelete = []; 
var ObjectID = req.mongo.ObjectID; //req is request from express 

req.body.forEach(function(item){  //req.body => [{'_id' : ".." , "name" : "john"}] 
    usersDelete.push(new ObjectID(item._id)); 
}); 

collection.remove({'_id':{'$in': usersDelete}},function(){ 
    //res.json(contatos); 
}); 
Các vấn đề liên quan