找不到零数组项的记录过滤器

问题描述

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)检查匹配的元素:

@>