alias ne fonctionne pas avec ma commande mongo --eval

1

J'ai la commande suivante mongo shell pour supprimer tous les utilisateurs qui ne sont pas administrateurs

mongo --eval 'db.users.remove({group:{$ne:"admin"}})' collection

Cela marche.

Je veux créer un alias pour cette commande, mais les variantes possibles suivantes que j'ai essayées m'ont fourni les erreurs correspondantes

  1. alias mdelna="mongo --eval 'db.users.remove({group:{$ne:"admin"}})' collection"

    SyntaxError: Unexpected token :

  2. alias mdelna="mongo --eval 'db.users.remove({group:{"$ne":"admin"}})' collection"

    SyntaxError: Unexpected token :

  3. alias mdelna="mongo --eval 'db.users.remove({group:{"$"ne:"admin"}})' collection"

    ReferenceError: admin is not defined

  4. alias mdelna="mongo --eval 'db.users.remove({group:{"$"ne:'admin'}})' collection"

    ReferenceError: admin is not defined

  5. alias mdelna="mongo --eval 'db.users.remove({group:{"$"ne:admin}})' collection"

    ReferenceError: admin is not defined

  6. alias mdelna="mongo --eval 'var admin="admin";db.users.remove({group:{"$"ne:admin}})' collection"

    Cela ne donne aucune erreur . Mais cela ne fait rien non plus. Je vérifie la base de données et elle n'a pas fait son travail.

Que pourrais-je faire de mal?

réflexe de retard
la source

Réponses:

1

Il s’agit d’évader des objets pour que la commande complète soit correctement transmise par bash. Plus précisément, cela $posera un problème car bash tentera de le remplacer par la variable $ne(qui n'existe pas). Voici la version qui a fonctionné pour moi:

alias mdelna="mongo --eval 'db.users.remove({group:{\$ne:\"admin\"}})' collection"

Je ne garde pas les règles pour les différents caractères spéciaux dans ma tête, et il est assez difficile de les énoncer à partir de documents. Le moyen le plus rapide et le plus sale de tester ce type de chose est donc de voir quel écho revient lorsque vous le transmettez. le même argument. Voici deux pour la comparaison:

$ echo "mongo --eval 'db.users.remove({group:{$ne:\"admin\"}})' collection"
mongo --eval 'db.users.remove({group:{:"admin"}})' collection

Notez le manque de $ne- il a été remplacé par le contenu vide de la variable inexistante par bash. Maintenant, échappez vous $, voyez si cela résout le problème:

$ echo "mongo --eval 'db.users.remove({group:{\$ne:\"admin\"}})' collection"
mongo --eval 'db.users.remove({group:{$ne:"admin"}})' collection

Et maintenant, cela ressemble beaucoup plus à ce que nous visons - vous pouvez voir comment vous pouvez progressivement construire en fonction de la production jusqu'à obtenir ce dont vous avez besoin.

Adam C
la source