mongodb 日期查询不适用于 ISODate?



我可以通过这个搜索找到一个项目:

db.item.find({"startdate":{$gte: 1485521569000 }})

日期似乎对应

> new Date(1485521569000)
ISODate("2017-01-27T12:52:49Z")

但如果我搜索

db.item.find({"startdate":{"$gte" : ISODate("2017-01-01T00:00:00Z")}})

我没有得到任何结果。我做错了什么?

PS我找到的唯一方法是

db.item.find({"startdate":{"$gte" : (new Date("2017-01-01")).getTime()}})

是这样还是有更好的方法?

下面一个就可以了。

db.getCollection('test').find({
"key": {
"$gte": (ISODate("2017-01-01")).getTime()
}
})

原因:

您的数据在int64long

new Date查询中,您正在将日期转换为返回int的时间。因此get执行integer比较。

ISODate中,您正在传递一个日期,它不会将日期转换为integer,即毫秒。因此,如果你转换,两者都会起作用。

new Date((将当前日期作为Date对象返回。mongo shell使用ISODate帮助程序包装Date对象

var d = ISODate("2017-01-01")
print(d); //Sun Jan 01 2017 05:30:00 GMT+0530 (IST)

因此,比较失败了。

如果我理解,您在startdate字段中有时间戳,

这是一个选项,如果有帮助的话,可以使用aggregate((函数,使用$toDate,

  • $toDate将时间戳转换为ISO日期
db.collection.aggregate([
{
$match: {
$expr: {
$gte: [
{
$toDate: "$startdate"
},
ISODate("2017-01-27T12:52:49.000Z")
]
}
}
}
])

游乐场:https://mongoplayground.net/p/H7SFHsgOcCu

相关内容