PostgreSQL

数据库API差异点

查找数组元素

MongoDB

PostgreSQL

{"x.team": $c.me._id} 字符串数组

{"x.team.*": $c.me._id} 需要用.*指明任一项符合条件

{"x.team": {name: $c.me.x.name}} 对象数组

{"x.team.*.name": $c.me.x.name}

{"x.team": {age: {$gt: 20, $lt: 30}}} 大于20小于30岁

{"x.team.*.age": {$gt: 20, $lt: 30}}

暂不支持

$type$elemMatch$size$pullAll

部分支持

$push:默认添加到数组尾部,也可借助$position: 0添加到数组头部,但不能插入到中间,也不支持借助$each/$slice/$sort作细微操作。

执行SQL

pg(sql, values)

通常写在后端服务中,SQL可包含占位符,与前端传进来的values数组对应。

// 获取一条指定_id的商品信息
pg("select * from product where _id=$1 limit 1", values)[0]
// 获100元以上的商品名称和价格
pg("select _id, x['name'] as name,x['price'] as price from product where type=$1 and x['price']>$2", ["商品", 100])
// 对商品价格进行分组,计算每种价格的商品数量
pg("select x['price'] as price, count(*) as count from product group by x['price']")
// 更新商品名称和价格
pg("update product set x['name'] = $2, x['price'] = $3 where _id=$1 returning *", [_id, name, price])[0]


sql应该是静态不变的字符串,不应动态拼接,变量通过values传入,避免SQL注入风险,静态的sql执行效率高。
仅支持select和update语句,其它操作请使用对应表的接口更简单。

事务

transaction(rollbackExp) 可以开启事务,并在出错时回滚并执行rollbackExp表达式,表达式的返回值将返回给前端。

由众触低代码平台生成和驱动