【发布时间】:2019-09-11 22:30:57
【问题描述】:
我有一个带有日期属性的 mongodb 集合。我需要找到一些日期大于文字日期字符串的对象。我正在使用 node.js 本机驱动程序。我收到日期作为字符串。当我尝试这个时,它不起作用:
db.myCollection.find({
'dateField': { $gte : "1974-11-18T02:00:00.000Z" }
}).count()
这也不起作用:
db.myCollection.find({
'dateField': { $gte : {$date: '1974-11-18T02:00:00.000Z'} }
}).count()
但这有效:
db.myCollection.find({
'dateField: { $gte : ISODate("1974-11-18T02:00:00.000Z") }
}).count()
如何在不使用 Date() 或 ISODate() 函数的情况下按日期查询 mongodb?
编辑:
我不能使用函数,因为在我的 nodejs 应用程序上我有这个对象:
let conditions = {}
conditions['dateField'] = "1974-11-18T02:00:00.000Z"
let rows = await db.collection('myCollection').aggregate([
{$match: conditions},
{$count: "total"}
]).toArray()
所以我不能将条件对象上的“函数”传递给 mongodb 上的 $match,因为这不起作用:
conditions['dateField'] = new Date("1974-11-18T02:00:00.000Z")
【问题讨论】:
-
你有什么理由不使用
Date()函数吗?由于您试图找到仅大于提供日期的日期,因此您必须将字符串转换为日期才能进行比较 -
请看我的编辑
-
我不清楚你为什么不能使用
conditions['dateField'] = new Date("1974-11-18T02:00:00.000Z") -
我可以这样使用。这对我来说更难,因为我需要对我的对象进行深入搜索(我的查询是动态的,所以我需要找到所有日期,然后进行“替换”)。我从我的客户端应用程序(我在其中构建查询)收到一个 JSON,并且 JSON 不接受函数。所以我正在寻找一种方法来比较 mongo 上的日期和文字字符串中的日期
标签: javascript node.js mongodb mongodb-query