【问题标题】:Hazelcast Json object queryingHazelcast Json 对象查询
【发布时间】:2020-07-25 19:26:49
【问题描述】:

我将这些 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]

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

【问题讨论】:

    标签: java hazelcast


    【解决方案1】:

    这对我有用:

    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));
    }
    

    【讨论】:

    • 只是一个小评论:如果您有大量文档(比方说超过几千个),那么也许您想在年龄字段上创建一个索引。索引会消耗一些内存,但查询会快得多。如果没有索引,Hazelcast 必须扫描所有存储的条目。创建索引是一个简单的 MapConfig 选项。
    猜你喜欢
    • 1970-01-01
    • 2022-11-05
    • 2020-10-07
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多