2015-02-09 3 views
1

У меня есть логическое выражение:Расширенный логический запрос в Монго DB

(Ts == <lastTs> && Id > <lastId>) || Ts > <_lastTs> 

Где Ts и Id являются поля в коллекции и и являются переменными.

Я использую набор Yii Mongodb, поэтому я не могу использовать оператор «$ или», поскольку он не реализован.

Поэтому я изменил это заявление в:

!(!(Ts == <lastTs> && Id > <lastId>) && Ts <= <lastTs>) 

Можно ли запустить что-то подобное в Монго?

Я пытался построить что-то, но я заметил, когда я, например:

"$not": { 
    "created_at": {"$lte": ISODate("...")}, 
    "_id": {"$gte": MongoID(...)} 
} 

Это не возвращает никакого результата. Но когда я удаляю «$ not», он возвращает некоторые данные. Я не уверен, разрешено ли использовать $ не на поле.

Есть ли способ запустить такой запрос в Монго?

ответ

1

Вы можете установить сложные критерии, используя EMongoCriteria :: setConditions(). Он принимает любой тип массива в качестве параметров, а EMongoDocument :: find() передаст его без изменений в PHP-модем PHP.

Попробуйте это:

$c = new EMongoCriteria; 
$c->setConditions([ '$or' => [ 
        'created_at' => ['$gt' => ... ], 
        '$and' => [ 
         '_id' => ['$gt' => ... ], 
         'created_at' => ['$eq' => ...] 
        ] 
        ] 
       ]); 
$documents = MyCollection::model()->find($c); 
Смежные вопросы