2016-07-04 1 views
3

J'ai une collection MongoDB qui a un compte de 372985 noms, je veux supprimer des entrées après 200000 de sorte que le nombre total d'entrées après suppression réduit 372985-200000Supprimer des données partielles dans MongoDB

Comment puis-je faire par requête mongoDB?

USECASE

Mon code python est incapable de traiter d'énormes données selon ma configuration de la machine, donc je veux réduire la taille de la collecte de mongo afin qu'il puisse fonctionner dans la RAM limitée.

Si cela ne peut pas être fait par requête mongo, Quelqu'un peut-il donner un indice pour essayer de faire pareil python.

+0

peut-on utiliser saut et supprimer les enregistrements dans un document boucle de curseur –

+0

@PraneethGudumasu: Pouvez-vous illustrer par un exemple? – x0v

+0

try { \t Client MongoClient = nouveau MongoClient ("localhost", 27017); MongoDatabase db = client.getDatabase ("étudiants"); MongoCollection collection = db.getCollection ("grades"); \t MongoCurseur cursor = collection.find(). Skip (10) .iterator(); while (cursor.hasNext()) { \t \t \t Document doc = cursor.next(); \t \t collection.deleteOne (doc); \t } –

Répondre

1

Vous devez le faire par étapes, car MongoDB a besoin d'une requête pour faire correspondre les documents à supprimer; MongoDB ne peut pas utiliser skip ou limit lors de la suppression de documents.

  1. trouver (les IDs) les documents que vous souhaitez supprimer, en utilisant sauter pour sauter aux documents après 200000
  2. supprimer les documents qui appartiennent à la liste qui se trouve dans 1

Vous pouvez dans la coquille mongo:

var to_delete = db.collection.find({}, {_id : 1}) 
     .skip(200000) 
     .toArray() 
     .map(function(doc) { return doc._id; }); 

db.collection.remove({_id: {$in: to_delete}}) 
+0

Merci, cela a fonctionné pour moi :) – x0v