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の「ネイティブ」タイプではありません。ただし、状況に応じて選択できるいくつかの優れたオプションがあります。

「タイムスタンプ」数値を使用できます。(ネイティブのミリ秒単位、または必要に応じて秒に変換されます)。を使用して「now」のタイムスタンプを取得できます(new Date()).valueOf()

日時の一部を配列に分割することもできます。([ year, month, day, hour, minute, second ])これにより、グループ化を使用して、ますます特定の時間枠に「ドリルダウン」したり、日付の個々の部分に基づいてクエリを実行したりできるようになります。

テスト済みのライブラリから日付の操作とフォーマットが必要な場合は、view / show / list/etcで使用できるCommonJSモジュールとしてmoment.jsなどのサードパーティモジュールを取り込むことができます。

上記のクエリ例には、潜在的な問題が1つあります。基本的に、を介して「秒」を取得していDATE_DIFF(NOW(), ...)ます。ビュー関数では、ビューは外部の変数/条件の影響を受けないNOW()ようにする必要があるため、のような「一時的な」値を使用することはできません。ただし、これは、ビューの結果を取得し、出力を変換して、達成しようとしているもののような「相対的な」値を持つことができるリスト関数を追加することで解決されます。また、クエリ文字列引数を受け取って、ビューにダイナミズムをさらに追加することもできます。

于 2012-11-22T17:11:11.467 に答える