Node.jsでCloudSpannerを使用してクエリを補間する

ジャクソンクリストファーセン

Node.jsのCloudSpanner libを使用して、スパナークエリにLIMITORDER BYを動的に追加しようとしています

function getPosts (query) {
  const { limit, start, sortBy, sortOrder } = query;

  delete query.start;
  delete query.limit;
  delete query.sortBy;
  delete query.sortOrder;

  const meta = {};

  let limitClause = '';
  let sortClause = '';

  if (limit) {
    limitClause = `
    LIMIT @limit
    OFFSET @start
    `;

    meta.limit = limit && parseInt(queryObj.limit, 10);
    meta.start = start ? parseInt(start, 10) : 0;
 }

  if (sortBy) {
    sortClause = `ORDER BY @sortBy ${(sortOrder && sortOrder.match(/^desc/i)) ? 'DESC' : 'ASC'}`;

    meta.sortBy = sortBy;
  }

  const [postsRows] = await myDatabase.run({
    sql: `
      SELECT *
      FROM   posts@{FORCE_INDEX=posts_userId}
      WHERE  userId = @userId
      ${sortClause}
      ${limitClause}
    `,
    params: { userId, ...meta },
  });

   return orderRows;
}

myDatabaseこれはSpannerのインスタンスであることに注意してくださいhttps://cloud.google.com/nodejs/docs/reference/spanner/2.0.x/Spanner

現時点では、LIMIT句は期待どおりに機能しますが、応答はORDER BY句が無視されているように見えます

2番目のifステートメントを次のように置き換えると

if (sortBy) {
    sortClause = `ORDER BY ${sortBy} ${(sortOrder && sortOrder.match(/^desc/i)) ? 'DESC' : 'ASC'}`;
  }

その後、期待どおりに機能しますが、このように生の文字列をクエリに補間したくありません。

paramsがクエリにどのように補間されるかは正確にはわかりませんが、userId、limit、およびstart変数に対しては機能します。

Spannerインスタンスのrunメソッドが生成する補間の結果を確認することも役立ちますが、それを表示できるかどうか、またはどのように表示できるかはわかりません。

ジョン・コーウィン

クエリパラメータに関するCloudSpannerのドキュメントから

クエリパラメータは、任意の式の代わりに使用できます。ただし、識別子、列名、テーブル名、またはクエリ自体の他の部分の代わりに使用することはできません。

ORDER BY式は列名であり、サポートされているタイプのクエリパラメータではありません。この場合、クエリ文字列に補間する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AXIOS(Node.js)を使用してリクエスト間でCookieを保持する

分類Dev

Node.jsでSequelizeを使用して結合クエリを作成する方法

分類Dev

node.jsを使用してmysqlで多数のクエリを作成する方法

分類Dev

Node.jsを使用してAzureCosmosDBでSQLクエリを実行する方法

分類Dev

複数のクエリを使用してNode.jsでJSONを構築する

分類Dev

Node.jsでhtpasswdを使用してリクエストを認証する方法

分類Dev

非同期Node.JSを使用してHTTPリクエストを処理する

分類Dev

Node.jsで画像をリクエストして画像を出力する方法

分類Dev

QPromisesを使用してnode.jsでGETリクエストをチェーンする

分類Dev

node.jsを使用してsequelizeで内部結合クエリを制御する方法は?

分類Dev

Node.jsでpgを使用してPostgresqlデータベースを適切にクエリする方法は?

分類Dev

node.jsを使用してデータベースからのクエリ結果をHTMLで表示する方法

分類Dev

Node.jsバックエンドを使用してReactアプリでCORSを有効にする

分類Dev

node.jsのルートでLIKE(正規表現)を使用してmongodbをクエリする方法は?

分類Dev

Node.js-複数のクエリを使用してJSONを非同期で構築する

分類Dev

Node.jsを使用してHTTPリクエストでJavaScript名をフォローする方法は?

分類Dev

subStringを使用してnode.jsでエラーを取得する

分類Dev

curlを使用してNode.jsExpressをクエリする方法

分類Dev

Node.jsを使用してhttp(s)リクエストをLocalTunnelでホストされているNode.jsサーバーに送信する方法

分類Dev

NodeのPostgresでSequelizeリクエストを使用して日付範囲でクエリを実行する

分類Dev

Node.jsを使用してAJAXリクエストを介してRedisからデータを取得する

分類Dev

node.jsを使用してbaidumap APIのリクエストを送信すると、間違った応答が返されますか?

分類Dev

Node.jsとExpressを使用してunirestGETリクエストを作成します

分類Dev

node.jsのwhere句を使用してクエリを選択します-mysql?

分類Dev

Node.JSを使用してMySQLをクエリし、結果をWebページに表示する

分類Dev

$http を使用して node.js にリクエストを PUT

分類Dev

リクエストを使用してnode.jsで画像をパイピングするかコールバック本文を送信するか

分類Dev

リクエストを使用してnode.jsで画像をパイピングするかコールバック本文を送信するか

分類Dev

リクエストを使用してNode.jsのバイナリコンテンツを取得する

Related 関連記事

  1. 1

    AXIOS(Node.js)を使用してリクエスト間でCookieを保持する

  2. 2

    Node.jsでSequelizeを使用して結合クエリを作成する方法

  3. 3

    node.jsを使用してmysqlで多数のクエリを作成する方法

  4. 4

    Node.jsを使用してAzureCosmosDBでSQLクエリを実行する方法

  5. 5

    複数のクエリを使用してNode.jsでJSONを構築する

  6. 6

    Node.jsでhtpasswdを使用してリクエストを認証する方法

  7. 7

    非同期Node.JSを使用してHTTPリクエストを処理する

  8. 8

    Node.jsで画像をリクエストして画像を出力する方法

  9. 9

    QPromisesを使用してnode.jsでGETリクエストをチェーンする

  10. 10

    node.jsを使用してsequelizeで内部結合クエリを制御する方法は?

  11. 11

    Node.jsでpgを使用してPostgresqlデータベースを適切にクエリする方法は?

  12. 12

    node.jsを使用してデータベースからのクエリ結果をHTMLで表示する方法

  13. 13

    Node.jsバックエンドを使用してReactアプリでCORSを有効にする

  14. 14

    node.jsのルートでLIKE(正規表現)を使用してmongodbをクエリする方法は?

  15. 15

    Node.js-複数のクエリを使用してJSONを非同期で構築する

  16. 16

    Node.jsを使用してHTTPリクエストでJavaScript名をフォローする方法は?

  17. 17

    subStringを使用してnode.jsでエラーを取得する

  18. 18

    curlを使用してNode.jsExpressをクエリする方法

  19. 19

    Node.jsを使用してhttp(s)リクエストをLocalTunnelでホストされているNode.jsサーバーに送信する方法

  20. 20

    NodeのPostgresでSequelizeリクエストを使用して日付範囲でクエリを実行する

  21. 21

    Node.jsを使用してAJAXリクエストを介してRedisからデータを取得する

  22. 22

    node.jsを使用してbaidumap APIのリクエストを送信すると、間違った応答が返されますか?

  23. 23

    Node.jsとExpressを使用してunirestGETリクエストを作成します

  24. 24

    node.jsのwhere句を使用してクエリを選択します-mysql?

  25. 25

    Node.JSを使用してMySQLをクエリし、結果をWebページに表示する

  26. 26

    $http を使用して node.js にリクエストを PUT

  27. 27

    リクエストを使用してnode.jsで画像をパイピングするかコールバック本文を送信するか

  28. 28

    リクエストを使用してnode.jsで画像をパイピングするかコールバック本文を送信するか

  29. 29

    リクエストを使用してNode.jsのバイナリコンテンツを取得する

ホットタグ

アーカイブ