Программная проверка синтаксиса запроса mongodb

У меня есть метод API, в котором пользователь может передать свой собственный запрос. Поле в коллекции просто ns, поэтому пользователь может передать что-то вроде:

v.search = function(query: Object){

   // query => {ns:{$in:['foo','bar',baz]}}  // valid!

   // query => {ns:{$in:{}}}  // invalid!

   // query => {ns:/foo/}     // valid!

});

есть ли способ сделать это, например, дымовой тест, который может не выполнять явно неправильные запросы?

Я надеюсь, что некоторые библиотеки MongoDB будут экспортировать эту функциональность ... но, по всей вероятности, они проверяют запрос только путем отправки его в базу данных, которая фактически является реальным арбитром того, какой запрос действителен / недействителен.

Но я хочу проверить запрос перед его отправкой в ​​БД.

Почему бы не запустить его на пустой коллекции и посмотреть, нет ли ошибок синтаксического анализа?

Tarun Lalwani 01.05.2018 17:31

@TarunLalwani Да, это дорогой способ проверки запроса, занимает слишком много времени для высокопроизводительного сервера.

user7898461 01.05.2018 23:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
2
3 840
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не думаю, что это возможно сделать иначе, чем путем отражения объекта query.ns и проверки каждого его свойства / связанного значения.

Ответ принят как подходящий

Некоторые модули, входящие в состав Компас MongoDB, были сделаны с открытым исходным кодом. В вашем случае могут быть полезны два модуля:

Хотя они могут не соответствовать вашему варианту использования на 100%, они должны дать вам очень тщательную проверку. Например npm install mongodb-language-model, тогда:

var accepts = require('mongodb-language-model').accepts;

console.info(accepts('{"ns":{"$in":["foo", "bar", "baz"]}}'));  // true
console.info(accepts('{"ns":{"$in":{}}}'));                     // false
console.info(accepts('{"ns":{"$regex": "foo"}}'));              // true

Также может быть интересен npm install mongodb-query-parser для синтаксического анализа строкового значения в запрос JSON. Например:

var parse = require('mongodb-query-parser');
var query = '{"ns":{"$in":["foo", "bar", "baz"]}}';
console.info(parse.parseFilter(query));    // {ns:{'$in':['foo','bar','baz']}}

хорошо, не могли бы вы показать пример использования mongodb-query-parser для нашей прекрасной публики?

user7898461 08.05.2018 04:14

Спасибо @Wan Bachtiar. Я пытался найти валидатор запросов для очистки для языка mongodb, когда наткнулся на это. Эта библиотека может помочь с базовыми проверками работоспособности путем проверки на соответствие MongoDB Injection с вводом из api в nodejs.

Gary 17.10.2018 04:04

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