Я использую griddb 5.3 с клиентом Java для хранения показаний датчиков IoT.
Каждое чтение хранится в коллекции, и в одном из столбцов содержится полезная нагрузка JSON в качестве строки.Properties props = new Properties();
props.setProperty("host", "127.0.0.1");
props.setProperty("port", "10001");
props.setProperty("clusterName", "defaultCluster");
props.setProperty("user", "admin");
props.setProperty("password", "admin");
GridStore store = GridStoreFactory.getInstance().getGridStore(props);
ContainerInfo info = new ContainerInfo();
info.setName("sensor_data");
info.setType(ContainerType.COLLECTION);
info.setColumnInfoList(Arrays.asList(
new ColumnInfo("id", GSType.INTEGER),
new ColumnInfo("timestamp", GSType.TIMESTAMP),
new ColumnInfo("payload", GSType.STRING) // JSON data stored here
));
store.putContainer(info);
Collection col = store.getCollection("sensor_data", Row.class);
String json1 = "{\"deviceId\":\"A1\",\"temp\":22.5}";
String json2 = "{\"deviceId\":\"A2\",\"temp\":28.1}";
Row row1 = col.createRow();
row1.setInteger(0, 1);
row1.setTimestamp(1, new Date());
row1.setString(2, json1);
Row row2 = col.createRow();
row2.setInteger(0, 2);
row2.setTimestamp(1, new Date());
row2.setString(2, json2);
col.put(row1);
col.put(row2);
< /code>
Чего я хочу, это запрос: < /p>
Find all rows where payload.deviceId = "A2". < /code>
В настоящее время, единственный способ, который я обнаружил: < /p>
Выберите все строки < /li>
Проанализировать json в java < /li>
Фильтр вручную < /li>
< /ul>
Это работает, но медленное с большими причинами. /> мой вопрос: < /strong> < /p>
Есть ли способ, чтобы Griddb для фильтрации строк непосредственно с помощью вложенного значения JSON внутри строкового столбца, без получения и проповедения всего в приложении? сделать это на Java.
Подробнее здесь: https://stackoverflow.com/questions/797 ... nested-key