cyclic-dynamodbでWhere句的なこと
前回、一覧取得について書いた。
今回は条件一致について
例の如く、公式ページ (opens new window)を参照すると parallel_scan
ってのが使えるぽい。
実装方法
テストデータ
[
{
key: 'TEST001',
props: {
updated: '2023-02-19T08:54:45.147Z',
name: 'taro'
genre: [ 'AA', 'BB' ],
created: '2023-02-19T08:47:04.284Z'
}
},
{
key: 'TEST002',
props: {
updated: '2023-02-19T08:54:44.750Z',
name: 'hanako'
genre: [ 'BB', 'CC' ],
created: '2023-02-19T08:47:03.897Z'
}
}
]
条件一致例
① name
が taro
で検索。
contains()
にカラムと検索値を指定するだけ。
import db from "cyclic-dynamodb";
...
const key = "name";
const value = "taro";
const users = await db.collection("users").parallel_scan({
expression: `contains(#key, :value)`,
attr_names: {
"#key": key,
},
attr_vals: {
":value": value,
},
});
console.log(users);
//{
// results: [
// CyclicItem {
// collection: 'users',
// key: 'TEST001',
// props: {
// updated: '2023-02-19T08:54:45.147Z',
// name: 'taro'
// genre: [ 'AA', 'BB' ],
// created: '2023-02-19T08:47:04.284Z',
// }
// }
// ]
// }
配列の一致例
② genre
に CC
が含まれる。
配列も同じ要領で検索できる。
import db from "cyclic-dynamodb";
...
const users = await db.collection("users").parallel_scan({
expression: `contains(genre, CC)`,
});
console.log(users);
//{
// results: [
// CyclicItem {
// collection: 'users',
// key: 'TEST002',
// props: {
// updated: '2023-02-19T08:54:44.750Z',
// name: 'hanako'
// genre: [ 'BB', 'CC' ],
// created: '2023-02-19T08:47:03.897Z'
// }
// }
// ]
// }
OR条件
①と②の条件でOR。
contains()
同士を or
で繋ぐとOR検索になる。
import db from "cyclic-dynamodb";
...
const users = await db.collection("users").parallel_scan({
expression: `contains(name, taro) or contains(genre, CC)`,
});
console.log(users);
//{
// results: [
// CyclicItem {
// collection: 'users',
// key: 'TEST001',
// props: {
// updated: '2023-02-19T08:54:45.147Z',
// name: 'taro'
// genre: [ 'AA', 'BB' ],
// created: '2023-02-19T08:47:04.284Z',
// }
// },
// CyclicItem {
// collection: 'users',
// key: 'TEST002',
// props: {
// updated: '2023-02-19T08:54:44.750Z',
// name: 'hanako'
// genre: [ 'BB', 'CC' ],
// created: '2023-02-19T08:47:03.897Z'
// }
// }
// ]
// }
以上。