Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较MongoDB中的日期差距_Mongodb_Date - Fatal编程技术网

比较MongoDB中的日期差距

比较MongoDB中的日期差距,mongodb,date,Mongodb,Date,我有一个在MongoDB中只有一条记录的集合: > db.tabMessages.find( ) { "tabId" : ObjectId("52a26579dc05b7a660ee12b1"), "fromUserId" : ObjectId("52a0ff959cad3f55275bd790"), "added" : ISODate("2013-12-07T00:02:42.490Z"), "_id" : ObjectId("52a265a2dc05b7a660ee12

我有一个在MongoDB中只有一条记录的集合:

> db.tabMessages.find( )

{ "tabId" : ObjectId("52a26579dc05b7a660ee12b1"),
  "fromUserId" : ObjectId("52a0ff959cad3f55275bd790"),
  "added" : ISODate("2013-12-07T00:02:42.490Z"), 
  "_id" : ObjectId("52a265a2dc05b7a660ee12ba") }
我想删除“过期”选项卡消息。我想到的问题是:

db.tabMessages.find( { added: { $lte: ISODate() - ( 15 * 60000 )  } } )
这将删除所有超过15分钟的条目。然而。。。没有。 为了让这一切顺利进行,我必须写下:

db.tabMessages.find( { added: { $lte: new Date( ISODate() - ( 15 * 60000 ) ) } } )
当我执行ISODate()-(15*60000)时,Mongo似乎将ISODate()对象转换为时间戳,此时与数据库中存储的日期对象的任何比较都将失败

现在。。。我是疯了,还是真的是这样?如果是这样的话,我会考虑将所有内容存储为UTC时间戳,以避免出现此类混乱问题

想法


注意:我想要的是一个非mongo特定的答案,如果存在的话。使用Mongo的TTL或Mongo的特定于ISODate的方法实际上不是一个选项,因为我使用抽象层访问数据库,并且我需要查询工作,而不管它在查询中是否工作:

db.tabMessages.find({ 
    added: { 
       $lte: ISODate().setTimestamp(ISODate().getTimestamp() - ( 15 * 60000 )) 
    } 
});
另一种方法是为集合设置TTL,mongo将为您完成以下工作:

db.tabMessages.ensureIndex( { "added": 1 }, { expireAfterSeconds: 900000 } )

对不起,我实际上是在从NodeJS运行查询。我在这里使用Mongo Shell只是为了尽可能简化我的问题……我使用DB层来使用Mongo(simpledblayer,我自己编写)。所以,我可能会用MySql、MongoDB、counchdb进行查询。。。我想要的是一个非mongo特定的答案(对不起,我没有具体说明),那么你到底在寻找什么呢。有人会在某个神奇的抽象层(没有人知道它是什么样子)中为您编写查询,而不考虑任何抽象层?