MongoChef Query IntelliShell и QueryBuilder показывают разные результаты

Следующий запрос, созданный и запущенный из Query Builder, показывает 10 записей результатов. Если я запускаю тот же код в IntelliShell, я ничего не получаю? Что мне не хватает?

Более простой снова работает.

db.user.find({

    em: {
        $regex: '.*\Qdirk\E.*',
        $options: 'i' 
    }
})

Более упрощенный, подобный этому, снова работает. Есть ли у MongoChef проблемы с $regex ...

db.user.find({em: "dirk@test.com"})

1 ответ

Решение

Обратите внимание, что вы столкнулись с очень особенным случаем здесь. Использование \Q ... \E требует, чтобы регулярное выражение задавалось в виде косой черты, а не в одинарных кавычках. То есть запрос должен быть db.user.find({ em: { $regex: /.*\Qdirk\E.*/, $options: 'i'}}) или просто db.user.find({ em: /.*\Qdirk\E.*/i }),

Имейте в виду, что это не проблема в MongoChef, но сама оболочка MongoDB требует использования формы косой черты, когда \Q а также \E используются в регулярном выражении, а IntelliShell MongoChef основана на оболочке MongoDB.

В то время как представление коллекции и Query Builder в MongoChef будут успешно обрабатывать любую форму, текст запроса, созданный графическим Query Builder в MongoChef, был улучшен в следующем выпуске 3.4.0, чтобы всегда создавать форму косой черты, которая будет давать согласованные результаты, если Затем запрос копируется и вставляется в IntelliShell или базовую оболочку MongoDB.

Спасибо за использование MongoChef!

Другие вопросы по тегам