Условный запрос $ match Monogdb - PullRequest
0 голосов
/ 10 июня 2019

Надеюсь, у кого-то есть ответ на мой вопрос.

Я пытаюсь найти поисковый запрос

  1. мой матч будет варьироваться
  2. иногда пользователь может забыть отправить введенный текст

однако при нажатии с введенным текстом или нет, он должен возвращать результаты (без входного текста будет возвращен весь массив, как без этапа сопоставления, а с входным текстом будет возвращен массив совпадений).

  1. если есть введенный текст

{$ match: {$ text: {$ search: "bla"}}

  1. если нет введенного текста

{$ match: ""}

пустой входной текст возвращает «ошибка: фильтр соответствия должен быть выражением в объекте»

Я имею в виду, как следующим образом,

var myMatch = {}
if( input=="bla")
{ myMatch = "{$text:  { $search: "bla" }"  }"
 else if(input=="")
{ myMatch = "" }

db.collection.aggregate([
    { "$match": myMatch} ])

, который возвращает «ошибку: фильтр соответствия должен быть выражением в объекте»

Ответы [ 4 ]

1 голос
/ 10 июня 2019

Это должно быть

else if(input=="") { myMatch = {} }

Поскольку ошибка говорит, что $ match требует объекта.

0 голосов
/ 29 июня 2019
var myMatch = {}

if(input == "bla"){
  myMatch["$text"]={};
  myMatch["$text"]["$search"]="bla";
}

db.collection.aggregate([
{ "$match": myMatch} ])

$ match require {} Object, если ваше условие истинно, заставляет вас конвейер $ match объект в противном случае {} объект не пропускает ошибку

0 голосов
/ 10 июня 2019

Вы можете написать более общий код.Давайте начнем с вашего кода и посмотрим, что мы можем изменить

function logic {
   var aggregationPipeLine= []
   if(input=="bla")
      aggregationPipeLine = [{ "$match" : {$text:  { $search: "bla" }  }}];

   performAggregataion(aggregationPipeLine, function(err, res)=> { 
     // Your code 
   });
}
function performAggregataion (pipeline, callback) {
     db.collection.aggregate(pipeline).exec(callback);
}

Итак, таким образом вы определили свой конвейер агрегации, когда хотите выполнить больше операций.

0 голосов
/ 10 июня 2019

Создайте свой запрос условно, совпадение должно быть только в том случае, если пользователь добавил какой-либо текст в поиск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...