首页 > 解决方案 > 按日期查找无功能

问题描述

我有一个带有日期属性的 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")

标签: javascriptnode.jsmongodbmongodb-query

解决方案


我通过将我的 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 格式,然后反序列化日期字符串以进行比较


推荐阅读