Couchbase N1QL запрашивает сумму из массива вложенных документов

#couchbase #n1ql

#couchbase #n1ql

Вопрос:

У меня есть следующая модель документа в моей базе данных couchbase

 {
 type:"account"
 id : "123",
 transactions: [
   { 
      type : "credit",
      value : 100
   },
   { 
      type : "debit",
      value : 10
   }
 ]
}
  

Как мне запросить все идентификаторы учетной записи и их сумму по всем кредитам?

Ответ №1:

Использование в качестве функций МАССИВА https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/arrayfun.html

 SELECT d.id, 
   ARRAY_SUM(ARRAY v.`value` FOR v IN d.transactions WHEN v.type = "credit" END) AS s  
FROM default AS d
WHERE d.type = "account";
  

или

Использование выражения подзапроса https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/subqueries.html

  SELECT d.id, 
       (SELECT RAW SUM(d1.`value`) 
        FROM d.transactions AS d1
        WHERE d1.type = "credit")[0] AS s  
    FROM default AS d
    WHERE d.type = "account";
  

Комментарии:

1. Спас мой день! Спасибо!

2. @vsr зачем нам [0] в вложенном запросе?