#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.