Запросить mongodb с помощью Morphia

Мне нужно запросить MongoDB, и я использую для этого Morphia. мне нужно сделать что-то вроде этого

 select * from table_name where (column_1== null or column_1== value1) AND (column_2= value2 or column_3= value3).

Я пробовал это, но это не сработало.

query.and(
                query.or(
                        query.criteria(field1).equal(value1),
                        query.criteria(field1).equal(null)
                ),
                query.or(
                        query.criteria(field2).equal(value2),
                        query.criteria(field3).equal(value3)
                )
            ); 

Кроме того, ниже приведен запрос Mongodb для вышеуказанного

   db.FILE_JOURNEY.find(  {$and :[ {
                                    $or: [ { SUBSCRIBERID: "225136298" }, { SUBSCRIBERID : null} ]
                                },      
                                {   
                                    $or: [ { BATCHID : "615060299" }, { FILENAME : "TR.NYHBE.834Q.D.212311980342.QHP.dat" } ]  
                                }
                              ] 
                        } 
                    )

Что я могу попробовать дальше?


person Anand    schedule 08.09.2014    source источник
comment
Не могли бы вы опубликовать пример документа, который, как вы ожидали, будет соответствовать этому запросу?   -  person Nic Cottrell    schedule 08.09.2014


Ответы (1)


Если вы попробуете что-то вроде этого:

   query.and(
       query.or(
          query.criteria(field1).equal(value1),
          query.criteria(field1).doesNotExist()
       ),
       query.or(
          query.criteria(field2).equal(value2),
          query.criteria(field3).equal(value3)
      )
   ); 

MongoDB/Morphia не сохраняет поля с нулевыми значениями — он просто пропускает это поле, поэтому запрос для поля = NULL никогда не будет соответствовать, поэтому doesNotExist. Странно, что не предупреждает. У вас включена функция disableValidation()?

person Nic Cottrell    schedule 08.09.2014
comment
все равно не работает... Выполняет ли DoesNotExist() функцию проверки нулевого значения?? Нет, я не использовал disableValidation(). Есть ли разница? - person Anand; 08.09.2014
comment
doNotExist() вернет false, если значение в базе данных равно null. Вам придется проверить оба, если это может быть либо. Вы бы сказали morphia не хранить нули, чтобы вы могли просто выполнить проверку существования. - person evanchooly; 08.09.2014