Подтвердить что ты не робот

Удаление нескольких документов из mongo в одном запросе

У меня есть список mongo '_id', который я хочу удалить. В настоящее время я делаю это

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

но моя проблема в том, что список слишком большой... (он может идти 100 000 +). Таким образом, запрос для каждого элемента в списке будет только увеличивать нагрузку на сервер. Является ли их способ передать весь список в запросе mongo, так что мне не нужно запускать запрос снова и снова.

Спасибо

4b9b3361

Ответ 1

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

Ответ 2

Перечислите их все и используйте оператор $in:

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

Ответ 3

Вам нужно передать идентификаторы в определенном формате с помощью ObjectId():

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

Remove не принимает целое число - вы должны использовать экземпляр ObjectId с форматом _id как string.

Ответ 4

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);
});