我需要将PostgreSQL查询中的这些WHERE条件转换为mongoDB:

(starts_at BETWEEN :starts AND :ends) OR (starts_at <= :starts AND ends_at >= :starts)

:starts:ends是UTC时间。具体来说,我要把这个从ActiveRecord移到MongoMapper。如果你能帮我的话,我会给你奖金的!

最佳答案

在mongodb中,您可以像这样使用$or运算符(以及$gte and $lte):

db.collection.find({
    $or: [
        { starts_at: { $gte: starts }, starts_at: { $lte: ends } },
        { starts_at: { $lte: starts }, ends_at: { $gte: starts } }
    ]
});

在MongoMapper中,它将转换为:
Model.where(
    :$or => [
        { :starts_at => { :$gte => starts, :$lte => ends } },
        { :starts_at => { :$lte => starts }, :ends_at => { :$gte => starts } }
    ]
)

08-26 08:18