Мой формат документа CouchDB, как показано ниже, и в зависимости от изменения цены может быть несколько документов с одинаковым product_id
& store_id
{
"_id": "6b645d3b173b4776db38eb9fe6014a4c",
"_rev": "1-86a1d9f0af09beaa38b6fbc3095f06a8",
"product_id": "6b645d3b173b4776db38eb9fe60148ab",
"store_id": "0364e82c13b66325ee86f99f53049d39",
"price": "12000",
"currency": "AUD_$",
"time": 1579000390326
}
, и мне нужно получить последний document
(по time
- метка времени) для заданного product_id
& store_id
Для этого, с моим текущим решением, я должен выполнить два запроса, как показано ниже;
Для получения последней отметки времени. Это возвращает самую последнюю временную метку для заданного product_id
& store_id
"max_time_by_product_store_id": {
"reduce": "function(keys, values) {var ids = []
values.forEach(function(time) {
if (!isNaN(time)){
ids.push(time);
}
});
return Math.max.apply(Math, ids)
}",
"map": "function (doc) {emit([doc.store_id, doc.product_id], doc.time);}"
}
На основе последнего timestamp
, снова я запрашиваю, чтобы получить документ с тремя параметрами, которые store_id
, product_id
& time
, как показано ниже,
"store_product_time": {
"map": "function (doc) {
emit([doc.store_id, doc.product_id, doc.time]);
}"
}
Это прекрасно работает для меня, но моя проблема в том, что я необходимо выполнить два запроса к базе данных, чтобы получить документ, и найти решение для извлечения документа в рамках одного запроса к базе данных.
В селекторе CouchDB также нет способа получить документ по значению MAX.