Документ Firestore не увеличивается с использованием REST API

Я пытаюсь увеличить свой Cloud Firestore с помощью REST API, однако в документации неясно, как это работает. Вот моя текущая реализация: -

Я пытаюсь увеличить целочисленное значение «c» на 2, поэтому, если сохраненное значение сервера равно 10, я хочу, чтобы при этом оно стало 12. Пожалуйста помоги.

{
  "writes": [
 {
        "currentDocument": {
          "exists": true
        }
      },
      {
        "transform": {
          "document": "projects/project_name/databases/(default)/documents/collection_name/user_id",
          "fieldTransforms": [
            {
              "increment": {
                "c": {
                  "integerValue": "2"
                }
              }
            }
          ]
        }
      }
  ]
}

Ошибка, которую я продолжаю получать: -

{
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"\": Root element must be a message.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "description": "Invalid JSON payload received. Unknown name \"\": Root element must be a message."
          }
        ]
      }
    ]
  }
}

Обновлено: вот ошибка после исправления моей полезной нагрузки:

{
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"writes\" at 'document': Cannot find field.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "document",
            "description": "Invalid JSON payload received. Unknown name \"writes\" at 'document': Cannot find field."
          }
        ]
      }
    ]
  }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В соответствии с FieldTransform документация вы должны установить fieldPath в своем представлении JSON. Вот список возможных типов для поля объединения transform_type:

{
  "fieldPath": string,

  // Union field transform_type can be only one of the following:
  "setToServerValue": enum (ServerValue),
  "increment": {
    object (Value)
  },
  "maximum": {
    object (Value)
  },
  "minimum": {
    object (Value)
  },
  "appendMissingElements": {
    object (ArrayValue)
  },
  "removeAllFromArray": {
    object (ArrayValue)
  }
  // End of list of possible types for union field transform_type.
}

Вы должны удалить fieldPath, который находится внутри приращения:

  "fieldTransforms": [
    {
      "increment": {
        "c": {
          "integerValue": "2"
        }
      }
    }
  ]

и измените его на эту структуру:

  "fieldTransforms": [
    {
      "fieldPath": "<FieldName>",
      "increment": {
        "integerValue": "2"
      }
    }
  ]

А также просто хочу отметить, что c и currentDocument должны быть внутри объектов transform. Для справки, вот полное представление writes, основанное на приведенном выше представлении JSON:

{
  "writes": [
    {
      "currentDocument": {
        "exists": true
      },
      "transform": {
        "document": "projects/project_name/databases/(default)/documents/collection_name/user_id",
        "fieldTransforms": [
          {
            "fieldPath": "c",
            "increment": {
              "integerValue": "2"
            }
          }
        ]
      }
    }
  ]
}

Вот результат использования Postman:

Для получения дополнительной информации вы можете проверить Firebase REST API: запись.

Я также обновил свой вопрос. Пожалуйста, посмотрите :)

Arnav 21.03.2022 14:18

@Arnav, ты правильно понял значение "document"? "document": "проекты/<project_name>/базы данных/(по умолчанию)/документы/<coll‌​ection_name>/<docume‌​nt_name>". Если да, не могли бы вы также включить в свой вопрос полный воспроизводимый код. Просто замаскируйте конфиденциальную информацию, если это возможно.

Marc Anthony B 21.03.2022 14:48

Проверьте скриншот, который я добавил в свой опубликованный ответ выше. Я использовал Postman для тестирования REST API.

Marc Anthony B 21.03.2022 15:00

Ага, понятно. Я предполагаю, что вы используете эту конечную точку: https://firestore.googleapis.com/v1/projects/<project-id>/da‌​tabases/(default)/do‌​cuments/*/:commit

Marc Anthony B 21.03.2022 15:13

Рад, что теперь это сработало с вашей стороны.

Marc Anthony B 21.03.2022 15:13

Привет, Марк, не могли бы вы также рассмотреть этот вопрос - stackoverflow.com/questions/71723641/…

Arnav 03.04.2022 13:52

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