java - 如何使用 HazelcastJsonValue 聚合?
问题描述
如何使用聚合HazelcastJsonValue
?
我正在尝试使用:
Long count = map1.aggregate(Aggregators.count(), e -> "name='John'".equals(e.getValue()));
Long count = map1.aggregate(Aggregators.count("name='John'"));
但是在这两种情况下我都得到 0,而实际结果应该是 4。
这是一个示例代码:
HazelcastInstance hazelCast = Hazelcast.newHazelcastInstance();
IMap<String, HazelcastJsonValue> map1 = hazelCast.getMap("map1");
map1.put("1", new HazelcastJsonValue("{"name":"John", "age":31, "city":"New York"}"));
map1.put("2", new HazelcastJsonValue("{"name":"John", "age":31, "city":"New York"}"));
map1.put("3", new HazelcastJsonValue("{"name":"John", "age":31, "city":"New York"}"));
map1.put("4", new HazelcastJsonValue("{"name":"John", "age":31, "city":"New York"}"));
Long count = map1.aggregate(Aggregators.count(), e -> "name='John'".equals(e.getValue()));
Long count = map1.aggregate(Aggregators.count("name='John'"));
System.out.println(count);
解决方案
谓词在我看来格式不正确——在第一个中,您使用“等于”将整个 JSON 文档(多个字段)与文档的一部分进行比较,因此它永远不会匹配。
对我有用的是:
Config c = new Config();
HazelcastInstance hazelCast = Hazelcast.newHazelcastInstance(c);
IMap<String, HazelcastJsonValue> map1 = hazelCast.getMap("map1");
HazelcastJsonValue jsv = new HazelcastJsonValue("{\"name\":\"John\", \"age\":31, \"city\":\"New York\"}");
map1.put("A", jsv);
map1.put("B", jsv);
Predicate p = Predicates.equal("name", "John");
long count = map1.aggregate(Aggregators.count(), p);
System.out.println("Count: " + count);
hazelCast.shutdown();
推荐阅读
- asp.net-core - 如何链接到asp.net MVC中的其他页面
- python - 为什么输出无限期地运行而不产生最终结果?(高低博弈)
- laravel - 如何在 laravel 中检查是否有数据库,如果没有则创建?
- blockchain - 无法在 Ubuntu 上使用 tronbox cli 初始化 tronbox
- javascript - 如何键入返回具有未知数量的键和键名的对象的响应?
- macos - 在 macOS 中连接多个文本文件
- python - python上没有soundex
- java - 将多个 observables 连接到一个源
- css - 在父 div 内部掩码下/后面滚动子 div
- javascript - Search Dropdown Javascript - 如何隐藏列表?