Firestore:使用AJAX帖子将某个数字字段增加一个可变数字。节点

时间:2019-03-02 20:09:46

标签: node.js express google-cloud-firestore

我的应用程序中的每个用户都有11个不同的数字字段。我想构建一个api,以将这些字段之一增加一定量。

请求的格式如下:

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

然后api将检索ID为“ 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 :(得分:0)

一次调用Document.update()可以更新文档中的多个字段。但是它只能更新单个文档。

  

我需要为每个字段创建一个api吗?

如果这些字段在单个文档中,则可以通过一次调用来更新所有字段,例如:

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

firestore是否支持变量增量(即不是硬编码数字)?

当前没有API告诉数据库服务器“增加此字段”,但是正在考虑这一点,甚至已经完成了工作。通常,尽管不能保证何时(甚至不知道)此功能会将其发布。