javascript - 按日期查找无功能
问题描述
我有一个带有日期属性的 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")
解决方案
我通过将我的 mongodb 字段从 date 类型更改为 string 来得到它。但字符串需要采用 ISO-8601日期格式,例如“1974-11-18T02:00:00.000Z”。现在我可以使用文字字符串中的日期查询 mongodb:
db.myCollection.find({
'dateField': { $gte : "1974-11-18T02:00:00.000Z" }
}).count()
我认为这是可行的,因为 mongodb 应该了解字符串是 ISO 格式,然后反序列化日期字符串以进行比较
推荐阅读
- vagrant - Vagrant up 失败并显示警告:远程连接断开。重试
- javascript - 如何在 tabNavigator 中重新加载屏幕?
- javascript - Wordpress Envira Gallery 不会以禁止状态加载
- tsql - 如何基于 T-SQL 中的函数使用 COLLATE?
- javascript - es6 中的闭包和这个绑定
- ios - 如何使 UITabbar 透明以便超级视图的背景图像可见?
- javascript - 如何使用 Angular 从不同的服务器或 CDN(运行时)动态加载子项?
- django - 如何向用户应用/设置权限
- python - 在 pandas 中转换数据
- c# - 如何将目录权限分配给特定目录的管理员?