Массовое обновление документов

Я работаю с PouchDB для хранения некоторых документов в браузере, у меня есть коллекция объектов, которые мне удалось db.put, и теперь мне нужно их «обновить», но без необходимости вручную ставить параметр _rev. Я знаю, что параметр _rev требуется, но я думал просто сохранить обновленный объект как новый документ, так как считаю, что это меньше накладных расходов. Мой вопрос в том, как я могу получить все документы и получить только один (самый последний) отправленный документ каждого из них. Я думаю поставить им отметку времени, но я не хочу на это полагаться. Любая ориентация будет высоко оценена.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете обновлять отдельные документы без проверки с помощью обработчика обновлений. https://docs.couchdb.org/en/latest/ddocs/ddocs.html?#update-функции

Обновление нескольких документов с получением новейших

Обновить несколько документов с помощью метки времени или номера версии можно следующим образом:

Чтобы получить новейшую версию документа, вы можете написать представление и уменьшить его, чтобы показать максимальное значение:

Ваша реализация может выглядеть так:

// Your documents
// PUT #1
{
  _id: "test_doc_[timestamp],
  doc_id: "test_doc",
  doctype: "book",
  timestamp: [timestamp],
  payload: "lorem ipsum"
}
// PUT #2
{
  _id: "test_doc_[timestamp + n],
  doc_id: "test_doc",
  doctype: "book",
  timestamp: [timestamp + n],
  payload: "dolor sit amet"
}

Получение последней версии одного документа

Чтобы получить новейшую версию test_doc, вы можете использовать _all_docs. Что делает запрос ниже, так это то, что он запрашивает все ваши документы, начиная с вашего идентификатора документа, сортирует их по убыванию и возвращает вам верхний набор данных, который в вашем случае будет самым новым.

GET /db/_all_docs?start_key = "test_doc_"&end_key = "test_doc_\ufff0"&descending=true&limit=1

Получение новейших версий многих документов

Чтобы получить самую новую версию многих документов, вы можете написать представление, а затем уменьшить его:

// view not formated so that it can be used directly
{
  "_id": "_design/books",
  "views": {
    "newest": {
      "reduce": "function (key, values, rereduce) {\r\n  return Math.max.apply({}, values);\r\n}",
      "map": "function (doc) {\n  if (doc.doctype === \"book\")\n  emit(doc.doc_id, doc.timestamp);\n}"
    }
  },
  "language": "javascript"
}

Вы можете вызвать представление с помощью: GET /db/_design/books/_view/newest?descending=true&reduce=true&group=true

Источники:

https://docs.couchdb.org/en/latest/ddocs/ddocs.html?#map-функции

Как рассчитать максимальное значение с помощью Map-Reduce в CouchDB?

Другие вопросы по теме