проверьте условие, если значения меньше, равны или больше, чем MongoDB

#arrays #mongodb #mongodb-query #aggregation-framework

Вопрос:

проверьте условия

  1. если value больше, то равно 1000.
  2. если значение value меньше, чем равно 2000. из параметров пользователь выберет либо 1 или 2 . Пользователь получает выходные данные в той же структуре, но только те документы, которые удовлетворяют условию в MongoDB
 {
    "data": [
        {
            "value": 1000
        },
        {
            "value": 3000
        },
        {
            "value": 1500
        }
    ]
}
 

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

1. Вы должны быть более ясны в том, что такое требуемый результат. вы хотите, чтобы ВСЕ предметы соответствовали условиям? вы хотите просто спроектировать элементы, соответствующие условиям?

2. Спасибо за комментарий, я хочу сопоставить базу документов при условии, что пользователь выберет, у меня есть 2 параметра, пользователь выберет 1 или 2 . Если вы все еще понимаете , дайте мне знать, спасибо

3. @Taki_ Я пытаюсь решить эту проблему, но получаю результат как истинный, так и ложный. Мне интересно получить значения, которые пользователь выбирает из параметра. исходя из параметров, пользователь будет либо 1 или 2

4. итак, пользователь выбирает 1 или 2, и вы должны отправить первый или второй запрос? Вы можете сделать это в javascript и построить как динамический запрос на основе 1 или 2, или вы можете сделать это в базе данных, используя $cond

5. Я не использую javascript , я использую только MongoDB

Ответ №1:

Этот запрос отвечает на вопрос :

  • пользователь вводит 1 или 2, сохраненные в переменной приложения, скажем var=parameter
  • если он ввел 1 => мне нужны документы, в которых указаны данные.значение>>=1000
  • если он ввел 2 => мне нужны документы, в которых указаны данные.значение>

*также предполагается, что данные(в вашем примере данных) являются массивом, а не коллекцией.

Запрос

  • укажите, {"eq" : [1 ,1]} {"eq" : [parameter ,1]} где параметр-это ваша переменная, имеющая значение, выбранное пользователем
  • работает с использованием условия, если пользователь ввел 1, выполняется первое сравнение , или если пользователь ввел 2, выполняется второе сравнение
  • сравнение выполняется с агрегатными операторами, операторами запроса при сравнении массива(авто принимает минимальное или максимальное значение), но агрегатные операторы не выполняют автоматическое, поэтому здесь $max это делается с операторами $min и. Я начинаю искать число, которое мы находим макс./мин., и мы сравниваем (например, операторы запросов автоматически выполняют)

Тестовый код здесь

 db.collection.aggregate([
  {
    "$match": {
      "$expr": {
        "$cond": [
          {
            "$eq": [
              1,
              1
            ]
          },
          {
            "$gte": [
              {
                "$max": "$data.value"
              },
              1000
            ]
          },
          {
            "$lte": [
              {
                "$min": "$data.value"
              },
              2000
            ]
          }
        ]
      }
    }
  }
])
 

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

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

2. Я хочу провести агрегацию и соответствовать условиям. и да data , это массив объектов, я хочу проверить состояние value объекта

3. Благодаря его работам, у вас есть идея? Если у меня есть оператор в качестве параметра и значения, которое передается из параметра, проверяющего условие в наборе данных. например, я передаю оператор параметра как $gte и value как 1000, чтобы он был более гибким.

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

5. вы-это название инструмента ? вы можете вставить ссылку ? о каком инструменте вы говорите для mongo db