在我的MongoDb中,我已将文档存入我的收藏中:
array (
'_id' => new MongoId("561f925017e74f6a08012c65"),
'timestamp' => new MongoDate(1444877100, 0),
'value' => 0,
)
当然所有文档都有自己的时间戳。
如何在时间戳上找到包含多个OR条件的文档? 例如,查找时间戳介于1444877100和1444877105之间或时间戳介于1444877120和1444877150之间的所有记录。
例如,在Mysql中它将是:
WHERE (
(timestamp >= 144877100 AND timestamp <= 1444877105) OR
(timestamp >= 1444877120 AND timestamp <= 1444877150)
)
我似乎无法正确行事或在正确的方向找到任何帮助。我也检查了这个问题(MongoDB - Multiple $or operations),但是使用了设定值,我无法弄清楚如何使用$ gte和$ lte(至少我认为这是要走的路)。
任何人都可以帮助我吗?谢谢!
答案 0 :(得分:1)
你想要的是$or
运算符,它对两个或多个表达式执行逻辑 OR 操作。因为$gte
和$lte
分别选择字段的值大于或等于(即> =)指定值且小于或等于(即&lt; = )指定的值。
$result = $collection->find(['$or' => [
['timestamp' => ['$gte' => new MongoDate(1444877100), '$lte' => new MongoDate(1444877105)]],
['timestamp' => ['$gte' => new MongoDate(1444877120), '$lte' => new MongoDate(1444877150)]]
]]);
由于find()
返回游标,您需要使用foreach循环遍历每个元素。像这样:
foreach ( $result as $doc ) { /* dosomething(); */ }
答案 1 :(得分:0)
你试过了吗?
{ $or: [ { timestamp: { $lte: someValue, $gte: someValue2 } }, { timestamp: { $lte: someValue3, $gte: someValue4 } } ] }