2012-11-22 85 views
1

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

大多数开发人员如何处理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的处理?

回答

3

日期时间在CouchDB中不是“本机”类型。但是,根据具体情况,您可以选择几种不错的选项。

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

您还可以将日期时间的部分分解为数组。 ([ year, month, day, hour, minute, second ])这将使您能够使用分组“深入”到日益特定的时间范围内,并根据日期的各个部分进行查询。

如果你想从一个测试过的库中进行日期处理和格式化,你可以把moment.js这样的第三方模块作为CommonJS module,你可以在view/show/list/etc中使用。

我可以在上面的示例查询中看到一个潜在的问题。您基本上通过DATE_DIFF(NOW(), ...)获得“秒以来”。在查看功能中,您将无法使用“瞬态”值,如NOW(),因为视图需要保持不受外部变量/条件影响。然而,这可以通过添加一个list function来解决,它可以将您的视图结果转换为具有“相对”值的输出,例如您想要实现的值,并且还可以接受查询字符串参数以进一步增加视图的活力。

+0

感谢您的所有信息。正是我需要的。 – Jonathon