> db.samplecollection.find();
{
"_id" : ObjectId("53c5ff4339c4473a278b46ca"),
"start_time_mongo" : ISODate("2014-08-25T05:30:00Z"),
"end_time_mongo" : ISODate("2014-08-25T06:30:00Z"),
}
以上收藏有一份文件。
我想在这个集合中搜索一些日期范围,如下面的2个例子。
Query1 :8月17日至8月18日之间的日期 - 使用javascript日期函数
答案:结果显示不在日期范围内的文件
> db.samplecollection.find({ $or: [ { start_time_mongo: { $lte: new Date("1407954599000") } }, { end_time_mongo: { $gte: new Date("1403029800000") } } ]},{start_time_mongo:1,end_time_mongo:1}).pretty();
{
"_id" : ObjectId("53c5ff4339c4473a278b46ca"),
"start_time_mongo" : ISODate("2014-08-25T05:30:00Z"),
"end_time_mongo" : ISODate("2014-08-25T06:30:00Z")
}
Query2 :8月17日至18日期间给出的日期 - 使用javascript日期函数
答案:结果显示不在日期范围内的文件
> db.samplecollection.find({ $or: [ { start_time_mongo: { $lte: ISODate("2014-08-13T18:29:59Z") } }, { end_time_mongo: { $gte: ISODate("2014-06-17T18:30:00Z") } } ] }, {start_time_mongo:1,end_time_mongo:1}).pretty();
{
"_id" : ObjectId("53c5ff4339c4473a278b46ca"),
"start_time_mongo" : ISODate("2014-08-25T05:30:00Z"),
"end_time_mongo" : ISODate("2014-08-25T06:30:00Z")
}
>
答案 0 :(得分:1)
您对此$or
的使用不正确。您似乎正在尝试执行“范围”查询以查找“日期”之间的日期。所以在这里你需要:
db.samplecollection.find(
{
start_time_mongo: { $lte: new ISODate("2014-08-13T18:29:59Z") },
end_time_mongo: { $gte: new ISODate("2014-06-17T18:30:00Z") } }
}
{start_time_mongo:1,end_time_mongo:1}
).pretty()
这是一个逻辑“和”,表示需要满足这两个日期条件,并且只返回满足这两个条件的文档。你也可能通常会这样做,所以日期是在“值”之间:
db.samplecollection.find(
{
start_time_mongo: { $gte: new ISODate("2014-06-17T18:30:00Z") } },
end_time_mongo: { $lte: new ISODate("2014-08-13T18:29:59Z") }
}
{start_time_mongo:1,end_time_mongo:1}
).pretty()
您发出的查询:
db.sample.find(
{
$or: [
{ start_time_mongo: { $lte: new ISODate("2014-08-13T18:29:59Z") } },
{ end_time_mongo: { $gte: new ISODate("2014-06-17T18:30:00Z") } }
]
},
{start_time_mongo:1,end_time_mongo:1}
).pretty()
此处评估的内容是正确的,因为日期 大于第二个条件且评估为true
。这就是 $or
所做的,并且当任一参数为真时返回。