Структура документа (только для иллюстрации)
Сотрудник
{
name : "..",
age : ..,
addresses [
{
"street":"...",
"country":{
name:"..",
continent:"..",
Galaxy:".."
}
}
],
company:".."
}
Запрос -
У меня есть только Адреса -> улица (тип String) и Адреса -> страна -> имя (тип String). И я хочу, чтобы все сотрудники соответствовали этим критериям.
Address a1 = new Address();
a1.setStreet("bla bla");
Country c = new Country();
c.setName("sth");
a1.setCountry(c);
Query<Employee> q = ds.createQuery(Employee.class).field("addresses").hasThisElement(a1)
НЕ извлекает результаты (когда на самом деле есть реальное совпадение). Похоже, из-за частичного совпадения документа "Страна". Если я заполню все поля страны, то получу результаты, как и ожидалось.
Вопрос № 1: Есть ли обходной путь для выше?
Вопрос № 2: Адрес - это массив, и я могу получить несколько пар (адрес # улица, название страны) и снова мне нужен список сотрудников, которые соответствуют заданным парам.
Что-то вроде:
Query<Employee> q = ds.createQuery(Employee.class).field("addresses").hasThisElement(a1).field("addresses").hasThisElement(a2).field(..) // and so on
Примечание: я могу указать адрес разбивки примерно так
Address a = new Address();
a.setStreet("bla bla");
q.createQuery(Employee.class).field("addresses").hasThisElement(a).field("addresses.country.name").equal("hoo");
НО это будет соответствовать Сотруднику, где улица = "бла бла" и страна.имя! = "Ху" в адресе №1 и улице! = "Бла бла" и страна.имя = "ху" в адресе №2. Вы получаете смысл. Я не хочу, чтобы такие сотрудники возвращались.
Пожалуйста, дайте мне знать, если это возможно. Большое спасибо.