2012-03-12 56 views
1

我有一個PostgreSQL的查詢這些WHERE條件,我需要翻譯成的MongoDB:翻譯PostgreSQL的條件MongoDB的

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

:starts:ends是UTC時間。具體來說,我將其從ActiveRecord移動到MongoMapper。所以,如果你能幫助我,那就獎金!

回答

2

在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 } } 
    ] 
) 
+0

謝謝!我不得不稍微改變你的代碼,但它確實讓我走上了正確的道路。以下是我所結束的工作:其中:$或=> [0121]開始,{:$ gte =>開始,:$ lte =>結束}}, {starts_at:{:$ lte =>開始}, ends_at:{:$ gte => starts}} ] – 2012-03-12 22:23:40

+1

@MichaelIrwin,謝謝,我一定是thinkos;)。教我如何發佈代碼而不看它是否運行。無論如何,我對我的答案進行了更新以反映這一點。 – 2012-03-12 22:45:28