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);
我有一个逻辑表达式:
( 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);