Какова альтернатива db.eval() для выполнения строкового запроса MongoDB в nodejs начиная с версии 4.2?

#javascript #node.js #mon&odb #mon&odb-query #nestjs

#javascript #node.js #mon&odb #mon&odb-запрос #nestjs

Вопрос:

Я ищу способ выполнения строковых запросов mon&odb, таких как :

  var q = 'db.collection("restaurants").find({   "address.coord": {     $lt: -95.754168   } })';
 this.db.eval('function(){ return '   q   '.toArray(); }', function(err, res){
             console.lo&("the result is", res); 
 });o 
  

Насколько я понимаю из официальной документации Mon&oDB, раньше это было возможно, но не сейчас.

Есть ли другой способ добиться этого?

Я понимаю, что я мог бы хранить query condition и projections в переменных и передавать их как динамические объекты. Но возможно ли также пройти весь путь динамического и выполнять строковые запросы, извлекаемые из базы данных «на лету»?

Могу ли я обойтись без такого динамического характера? Может быть, а может и нет. Но я хочу знать все свои варианты.

Комментарии:

1. Конвейер агрегации, $expr, сопоставление / уменьшение.

2. В вашем примере eval кажется совершенно ненужным.

3. @D.SM это пример

Ответ №1:

Но возможно ли также пройти весь путь динамического и выполнять строковые запросы, извлекаемые из базы данных «на лету»?

Нет.

Сервер движется в противоположном направлении и расширяет MQL и конвейер агрегации дополнительными (структурированными) функциональными возможностями.

eval предназначен для замены параметрами структурированного запроса, такими как конвейер агрегации и $expr. Многие этапы конвейера агрегирования и операторы поддерживают переменные.

Если конвейер агрегирования недостаточно гибкий, map / reduce продолжает оставаться доступным как ближайшая прямая альтернатива eval.

Комментарии:

1. Платформа агрегации выглядит многообещающе. Я думал, что это предназначено только для запросов, таких как те, в которых есть предложение «&roup by». Но, оказывается, его также можно использовать и для простых запросов select. Спасибо, что довели это до моего сведения. Также я наткнулся на нечто под названием db.command() , которое вроде как eval, но не совсем.

2. Я бы сказал, что db.command совсем не похож на eval.