2

我有一组对象,其中包含在 Mongo 中可以预订酒店的日期。它看起来像这样,使用这里所说的 ISO 日期格式。

下面是文档的样子,试图在示例中保持简短。

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 2014-04-08不应返回

2014-04-13 2014-04-16不应返回

2014-04-17 2014-04-21 应该返回。

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

4

2 回答 2

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

这个命令怎么样?

于 2014-04-05T07:48:47.730 回答
1

好吧,我实际上希望您的文档有真正的 ISODates,而不是看起来像字符串的东西。当他们这样做时,以下查询表单将按预期匹配:

db.collection.find({ 
    "available": {
        "$elemMatch": { 
            "start": { "$gte": new Date("2014-04-17") },
            "end":   { "$gte": new Date("2014-04-21") } 
        }
    }
})
于 2014-04-05T07:39:59.443 回答