我有一系列对象,其中包含一个酒店可以在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看起来像是一个好的开始,但我不知道在那之后去哪里,所以我上面发布的所有三个例子都使用相同的查询。任何帮助表示赞赏。
答案 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") }
}
}
})