Mongo 数据库中的高级逻辑查询

Advanced logical query in Mongo DB

我有一个逻辑表达式:

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

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

我正在使用 Yii Mongodb 套件,所以我不能使用“$or”运算符,因为它没有实现。

所以我将该语句更改为:

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

是否可以在 Mongo 中 运行 这样的事情?

我试图构建一些东西,但我注意到,例如:

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

它没有return任何结果。但是当我删除“$not”时,它 return 有一些数据。我不确定是否允许在字段上使用 $not。

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

您可以使用 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);