1

回到今天的文件我有一个集合,其中该集合中的所有文件都有一个日期戳,其中包括时间和日期。最有效的方法从集合

当使用聚合框架我怎么说给我的价值观在当下呢?以下只给我午夜的条目。

db.strategy.aggregate(
    [ 
     { 
      $match: { 
      "date": new Date() 
      } 
     }, 

    ] 
); 

回答

1

为了得到这对今天的日期时间值的文件,你需要创建在start日期对象应在00:00:00.000(毫秒精度)保持当前日期时间时间日期查询范围,并为今天的时间日期到23:59:59.999end日期变量。

例如:

// Create the start date which holds the beginning of today 
var todayStart = new Date(); 
todayStart.setHours(0,0,0,0); 

// Create the end date which holds the end of today 
var todayEnd = new Date(); 
todayEnd.setHours(23,59,59,999); 

// Create the date range query object 
var query = { 
    "date": { 
     $gte: todayStart, 
     $lte: todayEnd 
    } 
}; 

// using the find() method 
db.strategy.find(query); 

或者使用aggregate()方法

db.strategy.aggregate({ "$match": query }); 
+0

感谢您的回答我猜我被我的问题是检查,我不能日期的方法应用到值的数据库,然后得到一个简单的日期1 = date2的比较。 –

+0

不用担心:)这将是这将不适用于相等比较因为您正在比较给定范围内的值。 – chridam

+0

我想这是我的观点。我想平等检查thisDate =日期(),而不是thisDateTime today.setHours(0,0,0,0)和today.setHours(23,59,59,999)之间。要做到这一点,前者我需要能够截断存储的日期以消除时间。 –

0

你应该得到的范围内,即价值从今天的12AM时间戳到今天的23:59:59时间戳。

Var d = new Date(); var startDate = d.setHours(0,0,0); var endDate = d.setHours(23,59,59); db.strategy.aggregate( [ {$ 匹配:{ “日期”:{$ GTE:的startDate,$ LTE:结束日期}} } ,

] 
); 
相关问题