1

У меня есть следующая команда оболочки mongo, чтобы удалить всех пользователей, которые не являются администраторами

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

Это работает.

Я хочу создать псевдоним для этой команды, но следующие возможные варианты, которые я попробовал, дали мне соответствующие ошибки

  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"

    Это не дает никакой ошибки. Но это также ничего не делает. Я проверяю базу данных, и она не сделала свою работу.

Что я могу делать не так?

1 ответ1

1

Это все об экранировании, так что полная команда правильно проходит через bash. В частности, $ будет проблемой, поскольку bash попытается заменить ее переменной $ne (которая не существует). Вот версия, которая работала для меня:

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

Я не храню правила для различных специальных символов в моей голове, и довольно сложно вычленить правила из документов, поэтому быстрый и грязный способ проверить подобные вещи - это посмотреть, что эхо вернется, когда вы передадите его. тот же аргумент. Вот два для сравнения:

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

Обратите внимание на отсутствие $ne - он был заменен пустым содержимым несуществующей переменной на bash . Теперь, экранируйте $ , посмотрите, исправит ли это:

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

И теперь это гораздо больше похоже на то, к чему мы стремимся - вы можете видеть, как вы можете постепенно наращивать результаты на основе результатов, пока не получите то, что вам нужно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .