Mongodb中的高级逻辑查询

时间:2015-02-09 15:10:26

标签: mongodb yii

我有一个逻辑表达式:

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

其中Ts和Id是集合的字段,而且是变量。

我正在使用Yii Mongodb套件,所以我不能使用&#34; $或&#34;运营商,因为它没有实施。

所以我把这句话改成了:

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

可以在Mongo中运行这样的东西吗?

我尝试构建一些东西,但是当我这样做时我注意到了:

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

它不会返回任何结果。但当我删除&#34; $ not&#34;它返回一些数据。我不确定它是否允许在场上使用$ not。

有没有办法在Mongo中运行这样的查询?

1 个答案:

答案 0 :(得分:1)

您可以使用EMongoCriteria :: setConditions()设置复杂条件。它接受任何类型的数组作为参数,EMongoDocument :: find()将它保持不变地传递给PHP的Mongo扩展。

试试这个:

$c = new EMongoCriteria;
$c->setConditions([ '$or' => [ 
                    'created_at' => ['$gt' => ... ],
                    '$and' => [
                        '_id' => ['$gt' => ... ],
                        'created_at' => ['$eq' => ...]
                     ]
                   ] 
                ]);
$documents = MyCollection::model()->find($c);