Firestore: увеличить некоторое числовое поле на переменную с помощью поста AJAX.NodeJs - PullRequest
0 голосов
/ 02 марта 2019

У меня есть 11 различных числовых полей для каждого пользователя в моем приложении.Я хочу построить API, чтобы увеличить одно из этих полей на определенную величину.

Запрос будет иметь такую ​​форму:

{
   "uid":"Qewqhfui7232289",
   "field":"someName",
   "value":13.4
}

API затем получит документ с идентификатором "uid "и увеличиваем поле someName на 13,4

Большинство примеров, которые я вижу, увеличивают определенное поле на константу.

Примерно так (но на самом деле это работает):

var router = express.Router();
router.post('/increment', function (req, res, next) {
    var ref = db.collection('UserInfo').doc(req.body.uid);
    var field=req.body.field;
    var value=req.body.value;

    var transaction = db.runTransaction(function(t) {
            return t.get(ref)
        .then(function(doc) {
            var updated= doc.data().field + value;
            t.update(ref, {field: updated);
            });
    }).then(function(result) {
        console.log('Transaction success!');
    }).catch(function(err) {
        console.log('Transaction failure:', err);
    });
res.send("response");
});

Нужно ли создавать API для каждого отдельного поля?

И поддерживает ли Firestore приращение переменных (т.е. не жестко запрограммированное число)?

РЕДАКТИРОВАТЬ: Некоторые пояснения::

1) Я просто планирую редактировать отдельные документы, а не несколько.

2) Я хочу создать API-интерфейс, который может увеличивать любое поле в соответствии с вводом тела запроса (вместосоздание API для каждого поля).Но это не существенно, так как я могу просто создать несколько API.

3) Мой главный приоритет - это знать, как увеличивать, используя переменную, которая устанавливается с помощью req.body.value, а не с фиксированным числом, которое жестко закодированов API.

EDIT2: я решил создать API для каждого поля.

1 Ответ

0 голосов
/ 03 марта 2019

Один вызов Document.update() может обновить несколько полей в документе.Но он может обновлять только один документ.

Нужно ли создавать API для каждого поля?

Если поля находятся в одном документе, вы можетеобновить их все одним вызовом, например:

var data= doc.data();
t.update(ref, {field: data.field + value, field2: data.field2 + value, field3: data.field3 + value);

И поддерживает ли Firestore приращение переменных (т.е. не жестко запрограммированное число)?

В настоящее время нет APIсказать серверу базы данных «увеличить это поле», но это рассматривается, и работа над ним даже была проделана.Как обычно, хотя нет никаких гарантий, когда (или даже если) эта функция превратит ее в релиз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...