javascript - 在 mongoDB Node.js 中搜索日期并忽略时间和日期

标签 javascript node.js mongodb date

我正在使用 node.js 和 monodb 数据库,我想根据日期查询记录,并且我想忽略时间和日期,仅匹配月份和年份,这是我的代码:-

  collection.find({ date: { "$gte": sDate, "$lt": eDate) } }).count(function (e, c) {
 });

这是有效的,但也匹配日期和时间,以及我如何只能匹配月份和年份?请帮我解决这个问题。

编辑:- 收集的一些数据:-

{
"_id" : ObjectId("5535e76f82a964d011e34fcf"),
"VisitorId" : "5535e72a82a964d011e34fcb",    
"date" : ISODate("2015-01-21T06:00:15.761Z"),
}

{
"_id" : ObjectId("5535e75f82a964d011e34fcf"),
"VisitorId" : "5535e72a82a964d011e34fcb",    
"date" : ISODate("2015-04-21T06:00:15.761Z"),
}

我将传递两个参数,即 {month:"1",year:"2015"};

并且在输出中应该显示第一个文档。

谢谢

最佳答案

您可以使用$where查询中的运算符:

collection.find({
    "$where": function() { 
        return this.date.getMonth() == 0 && this.date.getFullYear() == 2015
    } 
}).count(function (err, data) {
   // Handle err
});

但是,由于使用 $where,查询性能会受到相当大的影响。单独需要表扫描,它需要全局锁。您应该使用 $where仅当您无法使用其他运算符表达查询时。如果必须使用$where ,尝试包含至少一个其他标准查询运算符来过滤结果集。

其他选项是修改您的架构并将月份存储在其自己的属性中(如果它是查询中的公共(public)字段)。由于可以对字段建立索引,因此可以保证您获得更好的查询性能。

另一个选项是在查询特定月份和年份时,创建一个仅查找该特定月份的开始和结束的查询对象。

var sDate = new Date(2015, 0, 1);
var eDate = new Date(2015, 1, 1);

collection.find({ date: { "$gte": sDate, "$lt": eDate) } }).count(function (e, c) {
 });

关于javascript - 在 mongoDB Node.js 中搜索日期并忽略时间和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29798271/

相关文章:

javascript - 如何将 css 属性覆盖为默认值?

node.js - Node/ express : Session Expire Event?

node.js - 序列化查询花费太长时间

MongoDB:调用 Count() 与跟踪集合中的计数

mongodb - 如何禁用 MongoDB 的日志记录?

javascript - 如何在不使用 <iframe> 标签的情况下在 iframe 中加载聊天应用程序?

javascript:使用正则表达式匹配并替换文本区域中的非标记 URL

javascript - 如何使用 jQuery 更改可折叠内容的标题属性

node.js - 静态提供 JS 文件,包括使用 Express 的 Node 应用程序中的 Node 模块,以及客户端与服务器端编程

spring - Spring Data Mongodb Reactive 存储库中 findAll 方法的分页