J'ai une liste de mongo '_id' que je veux supprimer. Actuellement je fais ça
# inactive_users --> list of inactive users
for item in inactive_users:
db.users.remove({'_id' : item})
mais mon problème est que la liste est trop longue ... (ça pourrait aller à 100 000 +). Ainsi, interroger chaque élément de la liste ne fera qu'augmenter la charge du serveur. Est-ce leur un moyen de passer la liste entière dans la requête Mongo afin que je n'ai pas à lancer la requête encore et encore.
Je vous remercie
db.users.remove({'_id':{'$in':inactive_users}})
Répertoriez-les tous et utilisez l'opérateur $in
:
db.users.remove({_id:{$in:[id1, id2, id3, ... ]}})
Vous devez transmettre les identifiants dans un format spécifique à l'aide de ObjectId()
:
db.users.remove({_id: {$in: [ObjectId('Item1'), ObjectId('Item2'), ObjectId('Item2')]}});
Remove
n'accepte pas d'entier - vous devez utiliser une instance ObjectId
avec le format _id
en tant que string
.
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);
});
J'avais la même question et ai couru à travers ces réponses, mais il semble que le manuel de MongoDB recommande deleteMany au lieu de supprimer. deleteMany renvoie le nombre de suppressions ainsi qu'un accusé de réception du problème d'écriture (si l'opération a réussi).
const ids = [id1, id2, id3...];
const query = { _id: { $in: ids} };
dbo.collection("users").deleteMany(query, function (err, obj) {
if (err) throw err;
});
Ou avec une fonction de flèche:
const ids = [id1, id2, id3...];
const query = { _id: { $in: ids} };
dbo.collection("users").deleteMany(query, (err, obj) => {
if (err) throw err;
});
Ou mieux encore, avec une promesse:
const ids = [id1, id2, id3...];
const query = { _id: { $in: ids} };
dbo.collection("users").deleteMany(query)
.then(result => {
console.log("Records Deleted");
console.log(JSON.stringify(result));
//for number removed...
console.log("Removed: " + result["n"]);
})
.catch(err => {
console.log("Error");
console.log(err);
});