我想使用2016-01-14中小于15:00的日期时间来查询数据,但它无效。
这是我的示例集合
{
"_id" : ObjectId("5697528237b79c198c94ad1a"),
"actionName" : "touchMove",
"timeStamp" : ISODate("2016-01-14T14:47:13.596Z")
}
{
"_id" : ObjectId("5697528237b79c198c94ad16"),
"actionName" : "touchDown",
"timeStamp" : ISODate("2016-01-14T14:47:13.597Z")
}
{
"_id" : ObjectId("5697528237b79c198c94ad1e"),
"actionName" : "touchMove",
"timeStamp" : ISODate("2016-01-14T16:01:49.620Z")
}
{
"_id" : ObjectId("5697528237b79c198c94ad1b"),
"actionName" : "touchDown",
"timeStamp" : ISODate("2016-01-14T16:01:50.010Z")
}
{
"_id" : ObjectId("5697528237b79c198c94ad17"),
"actionName" : "touchMove",
"timeStamp" : ISODate("2016-01-14T16:01:49.630Z")
}
这是我的查询代码
db.getCollection('app1_touchpoint').find({
'timeStamp' : {'$lte':new Date(2016, 01, 14, 15, 00)}
})
当我查询时,具有' timeStamp'超过2016-01-14 15:00也显示在结果中。实际上显示了所有数据。 是否有人能够就如何以正确的方式进行此查询给我一些建议?谢谢。
答案 0 :(得分:0)
您在查询中添加的日期默认为c#中的本地日期。但是 - mongo中的日期默认为utc。
你有几个选择。
移动到位于utc行另一侧的位置。这将解决您的lte问题,但可能会为gte带来问题。
使用DateTimeKind.Utc 并在使用它进行查询之前将该日期类型设置为utc。
例如
如果我打算用你的样本数据来做,我会这样做:
var dt = DateTime.SpecifyKind(new Date(2016, 01, 14, 15, 0, 0), DateTimeKind.Unspecified);
db.getCollection('app1_touchpoint').find({
'timeStamp' : {'$lte':dt}
});
我假设我们的目标是在数据库中查询日期(而不是在将这些日期转换为您的时区后查询它们)。这将实现这一目标。