mongodb находит запрос с помощью ИЛИ и И

#php #mongodb #mongodb-query

#php #mongodb #mongodb-запрос

Вопрос:

У меня есть следующий запрос if.

 if(($version[0] == 1)||($version[1] > 6)||($version[2]>=14 amp;amp; $version[1] == 6))   
{
  echo "true";
}
  

Теперь я хочу, чтобы этот запрос был переведен в запрос mongodb.
В коллекции mongo у меня есть следующая запись:

 {
  "main_version" : 0,
  "sub_version" : 6,
  "build_version" : 14,
  "module" : "Co2",
  "active" : 1
}
  

Когда я пытаюсь выполнить следующий запрос, я получаю ошибку mongo.

 $where = array('$or' => array(
                array('main_version'=> (int)$version[0]),
                array('sub_version'=> array('$gt'=> (int)$version[1])),
                array('$and' =>  array('build_version' => array('$gte'=> (int)$version[2])),
                                  array('sub_version' => (int)$version[1]),
                     ),
                array('active'=> 1),
                ),
               );
  

Ошибка: не удается канонизировать запрос: неверное значение и требуется массив’

Кто-нибудь знает, как решить этот запрос?

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

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

2. В настоящее время я использую php

3. Хорошо работал в php 6 лет назад, но я думаю, что ваш оператор $ and должен принимать массив запросов, что-то вроде array(‘$and’ => array(array(‘build_version’ => array(‘$ gte’=> (int)$version[2])), array(‘sub_version’ => (int)$version[1])) Я думаю, ‘and’ принимает массив, как вы делаете для ‘или’ opereartor, здесь вы передаете запрос вместо массива.

4. Рахул, да, дополнительный массив был решением. tx

5. @RahulKumar добавьте свое решение в качестве ответа, чтобы арджан мог принять его, и оно будет выделяться больше.

Ответ №1:

Ну, работал в php 6 лет назад, но я думаю, что ваш оператор $ and должен принимать массив запросов,

что-то вроде array('$and' => array(array('build_version' => array('$gte'=> (int)$version[2])), array('sub_version' => (int)$version[1]))

‘и’ принимает массив, как вы делаете для ‘или’ opereartor, здесь вы передаете запрос вместо массива.

Ответ №2:

Да, дополнительный массив был решением. tx