MongoDb запустить команду из строки

1

У меня есть запрос монго в строковом формате. Как я могу выполнить этот строковый запрос на Монго?

Я могу запустить это на оболочке Монго:

db.getCollection('myCollenction').find({})

Как я могу запустить ту же команду на собственном драйвере mongo для node.js?

var query = "db.getCollection('myCollenction').find({})";
db.runCommand(query);

У меня есть конструктор запросов mongodb, и теперь мне нужно получить сгенерированный запрос и выполнить его на mongo.

Я использую node.js 8.11.1 и драйвер собственного узла mongodb 3.1

редактировать

Я обнаружил, что для этого могу запустить функцию mongodb eval, но она устарела. Есть еще один способ сделать это? Или есть другой способ получить сгенерированное условие в jquery-querybuilder и выполнить в моей базе данных mongo, чтобы получить результаты?

  • 0
    Чем вызван запрос?
  • 0
    Я использую jquery-querybuilder для создания запроса mongodb. Jquery-querybuilder генерирует массив объектов, содержащий условия mongodb или те же условия объекта в строковом формате json. Поэтому мне нужно получить этот «объект» или строку и выполнить на моей базе данных Монго, чтобы получить результат.
Показать ещё 7 комментариев

1 ответ

0
Лучший ответ

Используя плагин mongodb-support, который поставляется с jQuery QueryBuilder, вы можете использовать метод getMongo() чтобы получить объект, который можно напрямую db.collection.find() в db.collection.find():

var rules_basic = {
  condition: 'AND',
  rules: [{
    id: 'price',
    operator: 'less',
    value: 10.25
  }, {
    condition: 'OR',
    rules: [{
      id: 'category',
      operator: 'equal',
      value: 2
    }, {
      id: 'category',
      operator: 'equal',
      value: 1
    }]
  }]
};

$('#builder-basic').queryBuilder({
  plugins: ['bt-tooltip-errors'],
  filters: [{
    id: 'name',
    label: 'Name',
    type: 'string'
  }, {
    id: 'category',
    label: 'Category',
    type: 'integer',
    input: 'select',
    values: {
      1: 'Books',
      2: 'Movies',
      3: 'Music',
      4: 'Tools',
      5: 'Goodies',
      6: 'Clothes'
    },
    operators: ['equal', 'not_equal', 'in', 'not_in', 'is_null', 'is_not_null']
  }, {
    id: 'in_stock',
    label: 'In stock',
    type: 'integer',
    input: 'radio',
    values: {
      1: 'Yes',
      0: 'No'
    },
    operators: ['equal']
  }, {
    id: 'price',
    label: 'Price',
    type: 'double',
    validation: {
      min: 0,
      step: 0.01
    }
  }, {
    id: 'id',
    label: 'Identifier',
    type: 'string',
    placeholder: '____-____-____',
    operators: ['equal', 'not_equal'],
    validation: {
      format: /^.{4}-.{4}-.{4}$/
    }
  }],
  rules: rules_basic
});

$('.parse-json').on('click', function() {
  var result = $('#builder-basic').queryBuilder('getMongo');
  alert(JSON.stringify(result, null, 2));
});
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-PmY9l28YgO4JwMKbTvgaS7XNZJ30MK9FAZjjzXtlqyZCqBY6X6bXIkM++IkyinN+" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/query-builder.default.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js" integrity="sha384-vhJnz1OVIdLktyixHY4Uk3OHEwdQqPppqYR8+5mjsauETgLOcEynD9oPHhhz18Nw" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/query-builder.standalone.min.js"></script>

<div class="container">
  <div class="col-md-12">
    <div id="builder-basic"></div>

    <div class="btn-group">
      <button class="btn btn-primary parse-json" data-target="basic">Get Query</button>
    </div>
  </div>
</div>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню