2013-05-04 9 views
0

Je suis nouveau à MongoDB, donc je suis conscient que c'est une question très simple, mais j'ai cherché partout et je ne trouve pas de réponse? Fondamentalement, j'essaie de trouver tous les enregistrements dans une collection qui contiennent le mot "supprimer" et les supprimer. Pour obtenir les dossiers, j'utiliseComment supprimer des documents trouvés avec "distinct" dans MongoDB?

db.collection.distinct("delete") 

(corrigez-moi si je me trompe là-bas). Mais comment ferais-je pour supprimer ces derniers? Je l'ai essayé de créer une variable de ce (à savoir

var query = db.collection.distinct("delete") 

) puis exécuter

db.collection.remove(query) 

mais les dossiers sont toujours là? Toute aide est la bienvenue!

+0

supprimer dans n'importe quel domaine? quelle langue voulez-vous dans ... la coquille? – Drew

Répondre

2

En supposant que vous essayez de supprimer tous les documents qui contiennent un champ delete:

db.collection.remove({delete: {$exists: true}}); 
+0

Ah, d'accord. C'est une façon beaucoup plus propre d'accomplir la même chose. Je vous remercie! – hayleyelisa

1
var query = db.collection.distinct("delete") 
db.collection.remove({ delete : {$in : query} }) 

Attention: Il va supprimer tous les documents ayant la clé de suppression

+0

C'est exactement ce dont j'avais besoin. Je vous remercie! – hayleyelisa

+0

ne peut pas le faire fonctionner. hmm ne fonctionne pas sur les noms de champs ou les valeurs – Drew

0

Si vous fournissez un certain échantillon de document, les réponses que vous obtiendrez peuvent être plus précises et précises.

Il peut y avoir confusion ici. Vous avez dit «documents qui contiennent le mot supprimer». Une question est de savoir dans quel champ le mot "supprimer" apparaît?

La commande distinct() que vous émettez vous renvoie des valeurs distinctes d'un champ nommé "delete", pas des identifiants de documents où le mot "delete" apparaît dans une valeur de champ.

Par exemple, si vous avez un disque

{_id:1, x:"delete"} 
{_id:2,delete:true} 
{_id:3,delete:null} 
{_id:4,delete:false} 
{_id:5, x:"leave alone"} 

vous supprimerait le premier document avec

db.foo.remove({x:"delete"}) 

vous enlever le deuxième disque avec

db.foo.remove({delete:true}) 

vous retirer dossiers 2,3,4 avec

db.foo.remove({delete:{$exists:true}}) 

Il n'est pas nécessaire d'interroger d'abord tous les enregistrements dans le shell, puis de composer une requête à partir de ceux-ci. Vous pouvez spécifier les critères directement dans la commande remove.

Questions connexes