繁体   English   中英

在mongoDB node.js中搜索日期并忽略时间和日期

[英]Searching Dates and Ignoring time and date in mongoDB node.js

我正在使用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 如果必须使用$where ,请尝试包含至少一个其他标准查询运算符以过滤结果集。

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

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

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) {
 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM