Запрашивая массив в Hazelcast Jsonvalues - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь найти HazelcastJsonValue, пример данных для того же.

class A {
 B[] listOfB;
}

class B {
 int num;
 String name;
}

Объект 'A' присутствует в Hazelcast как HazelcastJsonValue, и я хочу создать запрос, который выбирает все объекты, содержащие B, для которыхnum = 10 и name = тестовый запрос Hazelcast для поиска в массиве с использованием предиката

Predicate.equal("listOfB[any].name","test")

для вышеуказанного запроса сценария, который я могу сделать с помощью предикатов

Predicate[] arrayOfPredicate = {Predicates.equal("listOfB[any].num",10)
                ,Predicates.equal("listOfB[any].name","test")};
Predicate p = Predicates.and(arrayOfPredicate);
System.out.println(p.toString()); // (listOfB[any].num=10 AND listOfB[any].name=test)

Пример данных в Hazelcast

[
  {
    "listOfB": [
      {
        "num": 10,
        "name": "ab"
      },
      {
        "num": 11,
        "name": "test"
      }
    ]
  },
  {
    "listOfB": [
      {
        "num": 10,
        "name": "test"
      },
      {
        "num": 12,
        "name": "xyz"
      }
    ]
  },
{
    "listOfB": [
      {
        "num": 30,
        "name": "abc"
      }
    ]
  }
]

Hazelcast-запрос для того же

(listOfB [любой] .num = 10 И listOfB [любой] .name = test) Но это не дает желаемых результатов, вместо этого результат ниже

[
  {
    "listOfB": [
      {
        "num": 10,
        "name": "ab"
      },
      {
        "num": 11,
        "name": "test"
      }
    ]
  },
  {
    "listOfB": [
      {
        "num": 10,
        "name": "test"
      },
      {
        "num": 12,
        "name": "xyz"
      }
    ]
  }
]

Желаемые результаты:

{
  "listOfB": [
    {
      "num": 10,
      "name": "test"
    },
    {
      "num": 12,
      "name": "xyz"
    }
  ]
}

Как получить желаемые результаты?

1 Ответ

0 голосов
/ 08 ноября 2019

Оба из вышеперечисленных должны были быть возвращены в вашем наборе результатов. Разве это не так? Тот факт, что вы хотите any , вернет true для вышеуказанных данных. Если вы ограничите фильтр listOfB [0], то будет возвращен второй, но я уверен, что вы не хотите ограничивать только первый элемент.

...