我们正在将一个相当大的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处理该查询?
答案 0 :(得分:3)
日期时间不是"原生"输入CouchDB。但是,您可以根据具体情况选择几种不错的选项。
您可以使用"时间戳"数值。 (以原生毫秒为单位,或者如果需要可以转换为秒数)您可以获得"现在"的时间戳。与(new Date()).valueOf()
。
您还可以将日期时间部分分解为数组。 ([ year, month, day, hour, minute, second ]
)这将使您能够使用分组来"向下钻取"进入越来越具体的时间框架以及基于日期的各个部分的查询。
如果您想要从经过测试的库中进行日期操作和格式化,您可以将moment.js中的第三方模块作为CommonJS module引入,您可以在视图/ show / list / etc中使用。
我可以看到上面的示例查询存在一个潜在问题。你基本上得到一个"秒以来"通过DATE_DIFF(NOW(), ...)
。在视图功能中,您无法使用"瞬态"值类似NOW()
,因为视图需要通过外部变量/条件保持不受影响。但是,这可以通过添加list function来解决,该{{3}}可以获取您的查看结果并将输出转换为具有相对"值就像你想要实现的那样,并且还可以接收查询字符串参数,以进一步为你的视图增添动力。