【问题标题】:Find by date without function按日期查找无功能
【发布时间】: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


【解决方案1】:

我通过将我的 mongodb 字段从日期类型更改为字符串得到它。但字符串需要采用 ISO-8601 日期格式,例如“1974-11-18T02:00:00.000Z”。现在我可以使用字符串中的日期查询 mongodb:

db.myCollection.find({ 
    'dateField': { $gte : "1974-11-18T02:00:00.000Z"  }
}).count()

我认为这是可行的,因为 mongodb 应该了解字符串是 ISO 格式,然后反序列化日期字符串以进行比较

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多