问题描述
my_column的类型为jsonb
这里json
{
"id": 4107,"states": [
{
"dt": "2020-11-06T10:24:30.277+0000","id": "order.new"
}
]
}
我需要找到状态为[0] .id =“ order.new” (数组中的零项)的所有记录
我尝试
SELECT * FROM history WHERE my_column @> '{states,id}'= 'order.new'
limit 10
但是我得到了错误:
ERROR: invalid input Syntax for type json
LINE 1: SELECT * FROM history WHERE my_column @> '{states,id}'= 'or...
解决方法
new L.Control.Draw({
draw: {
marker: false,polygon: false,polyline: false,rectangle: true,circle: false
},edit: false
}).addTo(map);
L.Rectangle.include({
contains: function (markers) {
var markersContained = markers.filter(marker => { return this.getBounds().contains(marker.getLatLng()) === true; })
return markersContained;
}
});
map.on(L.Draw.Event.CREATED,function (geometry) {
// Set an array containing all the markers
var markers = jsonToArray(layerGroup._layers);
console.log(markers);
var result = geometry.layer.contains(markers);
console.log('result => ',result);
});
运算符测试左操作数中是否包含右操作数。正确的操作数必须是有效的Json文档或文字,这就是为什么会出现语法错误的原因。
您想要的运算符是@>
,它使用数组作为提取路径:
#>
使用# SELECT * FROM history WHERE my_column #> '{states,id}' = '"order.new"'
limit 10;
id | my_column
----+-------------------------------------------------------------------------------------
1 | {"id": 4107,"states": [{"dt": "2020-11-06T10:24:30.277+0000","id": "order.new"}]}
(1 row)
运算符,您可以执行以下操作,但是它将在任何数组位置(不仅是索引0)检查匹配的元素:
@>