2014-04-04 122 views
1

我有一個對象數組,其中包含Mongo內預訂酒店的日期。它看起來像這樣,使用ISO日期格式作爲hereMongoDB - 查詢可用的日期範圍和酒店的日期範圍

下面是文檔的樣子,試圖在示例中保持簡短。

available: [ 
    { 
     "start":"2014-04-07T00:00:00.000000", 
     "end":"2014-04-08T00:00:00.000000" 
    }, 
    { 
     "start":"2014-04-12T00:00:00.000000", 
     "end":"2014-04-15T00:00:00.000000" 
    }, 
    { 
     "start":"2014-04-17T00:00:00.000000", 
     "end":"2014-04-22T00:00:00.000000" 
    }, 
] 

現在,我需要查詢兩個日期,簽入日期和簽出日期。如果日期可用,Mongo應該返回文檔,否則不會。這裏有幾個測試案例:

2014年4月6日TO2014年4月8日應該回報。

2014年4月13日TO2014年4月16日應該回報。

2014年4月17日TO2014年4月21日應該回報。

我該如何解決Mongo查詢?使用$elemMatch看起來像是一個好的開始,但是我不知道在哪裏使用它,所以我上面發佈的所有三個示例都使用相同的查詢。任何幫助表示讚賞。

回答

0

嗯,我其實希望你的文件有ISODates而不是似乎是字符串。當他們這樣做,然後下面的查詢形式的匹配,而預期:

db.collection.find({ 
    "available": { 
     "$elemMatch": { 
      "start": { "$gte": new Date("2014-04-17") }, 
      "end": { "$gte": new Date("2014-04-21") } 
     } 
    } 
}) 
0
db.collection.find({ 
    "available": { 
     "$elemMatch": { 
      "start": { "$lte": new Date("2014-04-17") }, 
      "end": { "$gte": new Date("2014-04-21") } 
     } 
    } 
}) 

這個怎麼樣的命令?