Я новичок в Couchbase и вроде застрял со следующей проблемой.
Этот запрос прекрасно работает в редакторе запросов Couchbase:
SELECT
p.countryCode,
SUM(c.total) AS total
FROM bucket p
USE KEYS (
SELECT RAW "p::" || ca.token
FROM bucket ca USE INDEX (idx_cr)
WHERE ca._class = 'backend.db.p.ContactsDo'
AND ca.total IS NOT MISSING
AND ca.date IS NOT MISSING
AND ca.token IS NOT MISSING
AND ca.id = 288
ORDER BY ca.total DESC, ca.date ASC
LIMIT 20 OFFSET 0
)
LEFT OUTER JOIN bucket finished_contacts
ON KEYS ["finishedContacts::" || p.token]
GROUP BY p.countryCode ORDER BY total DESC
Я получаю это:
[
{
"countryCode": "en",
"total": 145
},
{
"countryCode": "at",
"total": 133
},
{
"countryCode": "de",
"total": 53
},
{
"countryCode": "fr",
"total": 6
}
]
Теперь, используя этот запрос в приложении с начальной загрузкой, я получаю следующую ошибку:
Невозможно получить достаточно метаданных для сопоставления сущностей N1QL, вы выбрали _ID и _CAS?
при добавлении метаданных
SELECT
meta(p).id AS _ID,
meta(p).cas AS _CAS,
p.countryCode,
SUM(c.total) AS total
FROM bucket p
при попытке сопоставить его со следующим объектом:
data class CountryIntermediateRankDo(
@Id
@Field
val id: String,
@Field
@NotNull
val countryCode: String,
@Field
@NotNull
val total: Long
)
приводит к:
Невозможно выполнить запрос из-за следующих ошибок n1ql: {«msg»: «Выражение должно быть групповым ключом или агрегатом: (meta (p
). id
)«, »code»:4210}
Использование Map в качестве возвращаемого значения приводит к:
org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: ожидается, что запрос, возвращающий примитивный тип, будет возвращать точно1 результат, получил 0
Я явно пропустил что-то важное здесь, в термс о том, как писать правильные запросы Couchbase.Я застрял между необходимостью метаданных и получением этой ключевой / совокупной ошибки, которая относится к предложению GROUP BY.Я был бы очень благодарен за любую помощь.