簡體   English   中英

將數組插入到 Javascript Postgres 查詢中

[英]Interpolating an array into a Javascript Postgres query

所以我在 Node.js 中工作並使用 'pg' npm 模塊。 我正在嘗試檢查數組的內容是否包含在存儲在 Postgres 表中的數組中(順序對我來說無關緊要 - 如果之間存在 1:1 的元素比率,它應該返回 true數組)。

Postgres 查詢如下所示:

let getComFromMembers = `SELECT * FROM ComTable WHERE (members @> ($1) AND members <@ ($1))`

在我的 javascript 中,我這樣稱呼它:

let results = await client.query(getComFromMembers, [numberMembers]);

numberMembers 是一個數組,最初是從 Postgres 中拉出來的,然后映射到一個數字數組:

let postgresArray = []
// query tables and populate postgresArray with .push()
let numberArray = postgresArray.map(Number)

出於某種原因,我沒有從“結果”中得到任何回報。 例如,如果 numberArray 是一個包含元素 1、2 和 3 的數組,請看下面。

為了讓它工作,我需要直接查詢我的數據庫:

SELECT * FROM ComTable WHERE (members @> '{1,2,3}' AND members <@ '{1,2,3}')

我相信您需要像這樣執行查詢:

let getComFromMembers = `SELECT * FROM ComTable WHERE members @> $1 AND members <@ $1`;
let numberMembers = [101, 212, 333];
let results = await client.query(getComFromMembers, ["{" + numberMembers.join(",") + "}"]);

但正確的解決方案是“生成”並執行查詢,如下所示:

let numberMembers = [101, 212, 333];

let placeHolder = numberMembers.map((_, i) => `$${i+1}`).join(", ");
// the result would be "$1, $2, $3"

let getComFromMembers = `SELECT * FROM ComTable WHERE members @> ARRAY[${placeHolder}]::integer[] AND members <@ ARRAY[${placeHolder}]::integer[]`;
// the result would be "SELECT * FROM ComTable WHERE members @> ARRAY[$1, $2, $3]::integer[] AND members <@ ARRAY[$1, $2, $3]::integer[]"
getComFromMembers;

let results = await client.query(getComFromMembers, numberMembers);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM