1

我们正在将一个相当大的 PHP/MySQL 项目转换为 Angular/Node.js/CouchDB。我现在遇到的主要问题是我们的 MySQL 查询相当复杂,使用了很多日期函数(如 DATE_DIFF、DATE_FORMAT 等),我不知道如何将它们转换为这个新架构。

大多数开发人员如何处理 CouchDB 中的这些类型的函数?他们是否只是从数据库中提取原始数据并将所有计算留给控制器/前端?

示例查询:

SELECT DATE_DIFF(NOW(),table.datefrom) as how_long, DATE_FORMAT(table.datefrom,'%m/%d/%Y') as formatted_date FROM table ORDER BY datefrom

CouchDB 将如何处理该查询?

4

1 回答 1

3

日期时间不是 CouchDB 中的“本机”类型。但是,您有几个不错的选择,可以根据情况进行选择。

您可以使用“时间戳”数值。(以本机毫秒为单位,或根据需要转换为秒)您可以使用(new Date()).valueOf().

您还可以将日期时间的各个部分分解为一个数组。( [ year, month, day, hour, minute, second ]) 这将使您能够使用分组来“深入”到越来越具体的时间范围以及基于日期的各个部分的查询。

如果你想从一个经过测试的库中进行日期操作和格式化,你可以引入一个像moment.js这样的第三方模块作为一个CommonJS模块,你可以在你的视图/显示/列表/等中使用它。

我可以看到您上面的示例查询存在一个潜在问题。您基本上通过DATE_DIFF(NOW(), ...). 在视图函数中,您将无法使用“瞬态”值,NOW()因为视图需要不受外部变量/条件的影响。但是,这可以通过添加一个列表函数来解决,该函数可以获取您的视图结果并将输出转换为具有“相对”值,例如您想要实现的值,并且还可以接收查询字符串参数以进一步为您的视图添加动态。

于 2012-11-22T17:11:11.467 回答