首页 > 解决方案 > Hazelcast Json 对象查询

问题描述

我将这些 JSON 对象存储在 hazelcast

IMap<String, HazelcastJsonValue> hazelcast = instance.getMap("get");

我正在存储的 JSON

{"id":"01","name":"abc","age":33}   

{"id":"02","name":" data","age":37} 

{"id":"03","name":"abc","age":39}

如果我只想选择输出大于 35 的年龄字段:-

[37,39]

如何使用投影来做到这一点?

标签: javahazelcast

解决方案


这对我有用:

import com.hazelcast.core.*;
import com.hazelcast.projection.Projections;
import com.hazelcast.query.Predicates;
import org.junit.Test;

import java.util.Collection;

import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.junit.Assert.assertThat;

[...]

@Test
public void testJsonProjection() {
  HazelcastInstance hz = Hazelcast.newHazelcastInstance();
  IMap<Integer, HazelcastJsonValue> map = instance.getMap("myMap");

  map.set(0, new HazelcastJsonValue("{\"id\":\"01\",\"name\":\"abc\",\"age\":33}"));
  map.set(1, new HazelcastJsonValue("{\"id\":\"02\",\"name\":\" data\",\"age\":37} "));
  map.set(2, new HazelcastJsonValue("{\"id\":\"03\",\"name\":\"abc\",\"age\":39}"));

  Collection<Long> projection = map.project(
    Projections.singleAttribute("age"),
    Predicates.greaterEqual("age", 35)
  );

  assertThat(projection, containsInAnyOrder(37L, 39L));
}

推荐阅读