MongoDB - 查询酒店日期范围的可用日期范围

时间:2014-04-04 23:03:50

标签: mongodb date mongodb-query isodate

我有一系列对象,其中包含一个酒店可以在Mongo内预订的日期。看起来像这样,使用ISO日期格式作为here

这是文档的样子,试图将其缩短为例子。

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-04-06 TO 2014-04-08 应该返回。

2014-04-13 TO 2014-04-16 返回。

2014-04-17 TO 2014-04-21 返回。

我如何将此形式转换为Mongo查询?使用$elemMatch看起来像是一个好的开始,但我不知道在那之后去哪里,所以我上面发布的所有三个例子都使用相同的查询。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

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

这个命令怎么样?

答案 1 :(得分:0)

嗯,我实际上希望你的文件真实 ISODates而不是看似字符串。当他们这样做时,以下查询表单按预期匹配:

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